我有以下使用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会导致致命的后果:尝试除以零。这就是为什么我要在输出的第三栏中看到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
如何解决此问题?
欢迎任何贡献!
你快到了 使用以下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语法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句