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:.
您好我需要根据质量提取样品。样品很大,我只显示某些色谱柱。
第5列表示第6列中以':'分隔的值的信息。第5列中还有其他不同的格式,我在这里没有显示。
我需要提取一定价值的样本。例如,我需要DP> 12和SS = 1以及其他格式的其他值。
在第一行中,DP(第5/6列中的第3个元素)为5. SS = 1(元素5)。
在第二行中,DP是第5/6列中的第二个元素,值为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}}'
我正在寻找一种方法,而不是在不同格式上使用单独的awk,因为第5列中有许多其他不同的格式。
答案 0 :(得分:3)
您没有提供输入的预期输出,因此它不清楚您想要什么,但解决这些问题的最佳方法是首先创建一个数组,将字段名称映射到它们的值,然后根据需要使用,例如:
$ 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:.