awkスクリプトの問題を解決するには?

awkスクリプトの問題を解決するには?

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で除算しようとしました。これが出力の3番目の列で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

この問題をどのように解決できますか?

どんな貢献でも大歓迎です!

ベストアンサー1

ほぼすべて来ました。これを使用してください:

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構文をすばやく確認できますここ

おすすめ記事