次のファイルがあります。
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0
chr1 1355707 . G T . . DP=69;ECNT=1;NLOD=4.51 GT:AD:AF:F1R2 0/1:50,3:0.059:20,3
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4
chr1 2550056 . TC CT . . DP=99;ECNT=1;NLOD=9.03 GT:AD:AF:F1R2 0/1:63,2:0.053:33,2
10列の3番目の値が0.06より大きい行を印刷したいと思います。
cat file.txt | cut -f 10 | cut -f 3 | awk -F':' '$3>0.06'
私にだけ与える:
0/1:37,2:0.063:13,0
0/1:30,2:0.089:12,4
全行が欲しいです。 awkを使用して実行できますか?
ベストアンサー1
パイプラインからデータを破棄し始めると(実際にはcut
)、同じパイプラインの後続のステップでそのデータを再インポートできません。
代わりに、
$ awk 'split($10,a,":") && a[3] > 0.06' file
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4
これはスペースで区切られた10番目のフィールドを取得し、コロンで分割して配列にしますa
。split()
で生成された要素a
との3番目の要素が0.06より大きい場合は、a
元の行を印刷します。
ファイル内のフィールドがタブで区切られ、フィールドにスペースが含まれている場合は、-F '\t'
withを使用してawk
正しいフィールドが正しく見つかることを確認してください(わかっている限り、与えられたサンプルデータにはそのような問題はありません)。
アドレス指定コメントに続く質問:
awk 'split($10,a,":") && a[3] > 0.06 && split($11,b,":") && b[3] > 0.01' file