awkで開始ステートメントを使用しようとしていますが、何とか最初のステートメントが私が望む最初のレコードの代わりに各レコードの先頭に印刷されます。なぜそれがよく分からないのですが、誰かが私のコードにどのような問題があるのか教えてくれてありがとう。
awk 'BEGIN { OFS="\t" }{print "MARKER\tCHR\tBP\tEA\tNEA\tEAF\tP\tOR\tSE\tOR_95L\tOR95U\tN\tN_CASES\tN_CONTROLS\tSTRAND\tINFO\tHWE_P\tIMPUTED"}FNR>16 && $45!="NA" && $9>=0.4 { if ($1=="---") print $2,"'"$chr"'",$4,$6,$5,$45,$42,$48,$43,$44,$18,$23,$28,"+",$9,$33,"0" ; else print $2,"'"$chr"'",$4,$6,$5,$45,$42,$48,$43,$44,$18,$23,$28,"+",$9,$33,"1" }' ./out/expected_dcct_1kg_only${chr}_${chunk}.res > ./temp/expected_dcct_1kg_chr${chr}_${chunk}.tmp
私はこの行を見たいです:
マークChr BP .... 1
最初の行にしかありませんが、どういうわけかすべてのレコードに対して印刷されるようです。
以下は出力のスナップショットです。
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
rs7002152 8 145000056 C T 0.937422 0.984021 0.165311 0.71094 1.362 1304 79 1225 + 0.981763 0.309615 0
MARKER CHR BP EA NEA EAF P OR SE OR_95L OR95U N N_CASES N_CONTROLS STRAND INFO HWE_P IMPUTED
答え1
その理由は、あなたprint
がそのブロックにBEGIN
。ちなみに、これは通貨に追加する必要がないことを意味します。したがって、必要なものは次のとおりです(わかりやすくするためにフォーマットを少し変更しました)。BEGIN
OFS="\t"
"\t"
print
awk 'BEGIN { OFS="\t";
print "MARKER", "CHR", "BP", "EA", "NEA","EAF", "P","OR","SE",
"OR_95L","OR95U", "N","N_CASES", "N_CONTROLS", "STRAND","INFO",
"HWE_P","IMPUTED"
}
FNR>16 && $45!="NA" && $9>=0.4 {
if ($1=="---") print $2,"'"$chr"'",$4,$6, $5,$45,$42,$48,
$43,$44,$18,$23, $28,"+",$9,$33,"0" ;
else print $2,"'"$chr"'",$4,$6,$5,$45, $42,$48,$43,$44,$18,
$23,$28,"+",$9,$33,"1"
}' ./out/expected_dcct_1kg_only${chr}_${chunk}.res > \
./temp/expected_dcct_1kg_chr${chr}_${chunk}.tmp
答え2
AWKでは、BEGINブロックに含まれるすべてが実際のデータ操作の前に完了していることに注意してください。 BEGINブロックの外側にいくつかのコマンドを入れると、データ処理に影響を与え始めます。
ENDブロックも同様です。 ENDブロックは、すべてのデータ処理が完了した後に実行されます。