awk 스크립트에서 문제를 해결하는 방법은 무엇입니까?
Aug 21 2020
bcftools를 사용하여 얻은 다음 데이터 세트가 있습니다.
$ bcftools query -f '%CHROM %POS %REF %ALT %AN %AC \n' fname.vcf
CHROM POS REF ALT AN AC
6 85406127 T A 6 2
6 85406180 T G 6 5
6 85406187 T G 6 1
-
-
-
6 85434019 T A 0 0
6 85434075 A C 0 0
다음 명령으로 원하는 출력을 얻습니다.
bcftools query -f '%CHROM %POS %REF %ALT %AN %AC \n' fname.vcf | awk '$5 !=0' | awk '{printf "%s:%s %s:%s %f\n", $1, $2, $3, $4,$6/$5}'
6:85406127 T:A 0.333333
6:85406139 T:C 0.000000
6:85406180 T:G 0.833333
데이터 세트에서 5 번째 및 6 번째 열에 0이 포함되어 있습니다. 따라서 0을 0으로 나누면 치명적 : 0으로 나누기가 시도 됩니다. 이것이 출력의 세 번째 열에서 NA를보고 싶은 이유입니다.
6:85406127 T:A 0.333333
6:85406139 T:C NA
6:85406180 T:G 0.833333
출력을 얻으려는 시도는 다음과 같습니다.
bcftools query -f '%CHROM %POS %REF %ALT %AN %AC \n' fname.vcf | awk '{ if [[ $5!= 0 && $6!=0 ]]
'{printf "%s:%s %s:%s %f\n", $1, $2, $3, $4,$6/$5}'
else
'{printf "%s:%s %s:%s %b\n", $1, $2, $3, $4, 'NA'}'
}'
하지만이 결과를 받았습니다.
awk: cmd. line:1: { if [[ $5!= 0 && $6!=0 ]]
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: { if [[ $5!= 0 && $6!=0 ]]
awk: cmd. line:1: ^ syntax error
awk: cmd. line:2: {printf
awk: cmd. line:2: ^ unexpected newline or end of string
이 문제를 어떻게 해결할 수 있습니까?
모든 기부를 환영합니다!
답변
2 ferranm Aug 20 2020 at 22:26
거의 다 왔습니다. 이 awk를 사용하십시오.
awk '{ if ($5!= 0 && $6!= 0) {printf "%s:%s %s:%s %f\n", $1, $2, $3, $4,$6/$5} else {printf "%s:%s %s:%s NA\n", $1, $2, $3, $4} }'
'NA'문자열은 printf
문자열 자체의 일부입니다 . 또한 { *statemet* }
안에 넣지 마세요'
또한 AWK 내에서 bash
계산 ( [[ ]]
)을 혼합하지 마십시오 .
여기 에서 AWK 문법을 빠르게 확인할 수 있습니다.
2 EdMorton Aug 21 2020 at 06:16
삼항 표현식 만 있으면됩니다.
bcf... | awk 'NR>1{printf "%s:%s %s:%s %s\n", $1, $2, $3, $4, ($5 ? $6/$5 : "NA")}'
경우에 상관하지 않는 $6
것입니다 0
여부를 당신이 그것을로 나누어되지 않기 때문에.
보세요 ( 내가 가지고 있지 않은 명령 cat file
대신 사용 bcf...
) :
$ cat file CHROM POS REF ALT AN AC 6 85406127 T A 6 2 6 85406180 T G 6 5 6 85406187 T G 6 1 6 85434019 T A 0 0 6 85434075 A C 0 0 $ cat file | awk 'NR>1{printf "%s:%s %s:%s %s\n", $1, $2, $3, $4, ($5 ? $6/$5 : "NA")}'
6:85406127 T:A 0.333333
6:85406180 T:G 0.833333
6:85406187 T:G 0.166667
6:85434019 T:A NA
6:85434075 A:C NA