2016-08-22 4 views
2
1  875091 G  GA  GT:AD:DP:BQ:SS:FT:DP4 0/1:.:5:.:1:VarscanHighConfidenceIndel:1,2,1,1 
1  948846 T  TA  GT:DP:DP4:BQ:SS:FT:AD 1/1:50:10,0,10,0:.:1:VarscanHighConfidenceIndel:. 

こんにちは、品質に基づいてサンプルを抽出する必要があります。サンプルは巨大で、特定の列のみを表示しています。awkと異なる書式設定

列5は、列6の値の情報を ':'で区切って表しています。ここには表示されていない他の異なるフォーマットが列5にあります。

特定の値のサンプルを抽出する必要があります。たとえば、DP> 12、SS = 1など、他の形式の値が必要です。

最初の行では、列5/6の3番目の要素であるDPは5です。SS = 1(要素5)。第二行で

は、DPが列5/6の2番目の要素であり、値は50であり、SS = 1(エレメント5)

私はすべて同様のフォーマットをグループ化した、個々のAWKをしました彼らにコマンドを出す。

gzip -dc file1.vcf.gz | grep 'GT:AD:DP:BQ:SS:FT:DP4' |awk -F "\t" 'NR>1 {split($6,a,":"); if(a[5]==1 && a[3]>12){print $0}}' 
gzip -dc file1.vcf.gz | grep 'GT:DP:DP4:BQ:SS:FT:AD' |awk -F "\t" 'NR>1 {split($6,a,":"); if(a[5]==1 && a[2]>12){print $0}}' 

私はそれがありませんので、あなたはその入力与えられた期待される出力を提供していませんでしたコラム5.

+1

Do not have timeあなたは完全な答えを書くことができますが、 'split($ 5、a、/:/)'を使ってsp 'a'で見つけた値に基づいてあなたが望むフィールドと' split($ 6、v、/:/) 'を検索し、' v'にインデックスを付けます。 –

+0

grepを削除し、 'gzip ...のような$ 5のテストを追加することができます。 awk -F "\ t" 'NR> 1 && $ 5〜/ GT:AD ... | GT:DP ... | ....../{split(....); ....} 「行こう。 – shellter

答えて

3

であり、他の多くの異なるフォーマットとして異なるフォーマットで個々のawkを行うことなく、このへの道を探していますあなたが望むものを正確にクリアすることができますが、これらの問題に対する最良の一般的なアプローチは、まずフィールド名を値にマップし、それを使って配列を作成し、それを使って配列を作成することです。例:

$ cat tst.awk 
{ 
    split($5,n,/:/) 
    split($6,v,/:/) 
    for (i in n) { 
     f[n[i]] = v[i] 
    } 
} 
(f["DP"] > 5) && (f["SS"] == 1) 

$ awk -f tst.awk file 
1  948846 T  TA  GT:DP:DP4:BQ:SS:FT:AD 1/1:50:10,0,10,0:.:1:VarscanHighConfidenceIndel:.