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 블록은 모든 데이터 처리가 완료된 후 실행됩니다.