awk コマンドを使用して vcf.gz ファイルから行を削除します。

awk コマンドを使用して vcf.gz ファイルから行を削除します。

特定の列で特定の値を持つ行をフィルタリングする方法について質問しました。

今、特定の列から特定の値を持つ行を削除したいと思います。どうすればいいですか?

たとえば、表示され1/1た列の12345行を削除し、file.vcf.gz残りの行をnewfile.vcf.gz

例えば

#CHROM      POS         ALT     12345   
1           345632      T       0/1:4,4:8:99:105,0,106
4           032184      C       1/1:46,9:55:99:99,0,1222
6           843290      A       0/1:67,20:87:99:336,0,1641

予想される結果:

1           345632      T       0/1:4,4:8:99:105,0,106
6           843290      A       0/1:67,20:87:99:336,0,1641

答え1

これは最後の質問と正反対ですが

この一つ。

zcat file.vcf.gz | awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz

!$ 4がパターンでない場合は一致します。ただし、ヘッダー行は削除されません。ヘッダー行を削除するには、パイプラインに追加するだけですhead -n +2

zcat file.vcf.gz | head -n +2 |awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz

答え2

行を削除するには、以下を好みますsed

zcat file.gz | sed ':1/1:d' | gzip -c > new_file.gz

または、grep一致する行を無視してinverseを実行します。

zgrep -v '1/1' file.gz | gzip -c > new_file.gz

ヘッダーを同時に削除するには、中間sedまたはストリッピングをもう1つ作成しtailます。

zcat file.gz | sed -e ':1/1:d' -e '1d'  | gzip -c > new_file.gz
zgrep -v '1/1' file.gz | tail -n +2 | gzip -c > new_file.gz

関連情報