awkを使用した列の部分文字列に基づいて行を抽出する

awkを使用した列の部分文字列に基づいて行を抽出する

次の形式のタブ区切り vcf ファイルがあります。

#CHROM  POS   REF   ALT       INFO
chr1    111    A    TT;C     AC=0;AN=33
chr1    111    A     G;t     AC=0;AN=100
chr1    111    G     A       AC=110;AN=51
chr2    737    T     Q       AC=99;AN=10003
chr2    888    G     G       AC=100;AN=1636

AC付きの新しいテキストファイルに行を抽出したいです。情報列が 100 より大きいため、予想される出力は次のようになります。

#CHROM  POS   REF   ALT  INFO
chr1    111    G     A   AC=110;AN=51

これまで持っているawkコマンドは次のとおりです。


awk 'NR==1 || /AC=[0-9][0-9][0-9]+/ && !/AC=100/'  file.vcf > output.txt

しかし、ファイルがカーソルで完了するのに時間がかかります。抽出する方法はありますか? $ 5のAC(つまり、情報列)が100より大きくなければならないことを指定します。洞察力を高く評価いたします。

ベストアンサー1

$ awk -F'[\t=]' 'NR==1 || ($6+0)>100' file
#CHROM  POS     REF     ALT     INFO
chr1    111     G       A       AC=110;AN=51

または必要に応じて:

$ awk '{split($NF,p,/[=;]/)} NR==1 || p[2]>100' file
#CHROM  POS     REF     ALT     INFO
chr1    111     G       A       AC=110;AN=51

おすすめ記事