awk使用另一个捕获所有实例来过滤文件

时间:2016-12-06 23:15:20

标签: awk

在下面awk我尝试捕获KCNMA1的所有条件,gene中的行({1}}中的一行({1} } $8的{​​{1}}

因此,在下面的示例中,filetab-delimited出现的所有实例/行都将打印到KCNMA1

也可能有多个$8,但是会包含名称output;似乎捕获了可能的4个条件中的2个,但不是当前输出所示的所有实例。谢谢你:)。

基因

KCNMA1

文件

awk

当前输出

KCNMA1  

所需的输出R_Index Chr Start End Ref Alt Func.IDP.refGene Gene.IDP.refGene GeneDetail.IDP.refGene 4629 chr10 78944590 78944590 G A intergenic NONE;KCNMA1 dist=NONE;dist=451371 4630 chr10 79396463 79396463 C T intronic KCNMA1 . 4631 chr10 79397777 79397777 C - exonic KCNMA1;X1X . 4632 chr10 81318663 81318663 C G exonic SFTPA2 . 4633 chr10 89397777 89397777 - GAA exonic NONE;X1X;KCNMA1 .

R_Index Chr Start   End Ref Alt Func.IDP.refGene    Gene.IDP.refGene    GeneDetail.IDP.refGene
1   chr10   79396463    79396463    C   T   intronic    KCNMA1  .
2   chr10   79397777    79397777    C   -   exonic  KCNMA1;X1X  .

AWK

tab-delimeted

1 个答案:

答案 0 :(得分:2)

对于单基因,只需作为变量传递

$ awk -v gene='KCNMA1' -v d=';' 'NR==1 || d $8 d ~ d gene d' file 

您要使用的计数器似乎没必要,因为您想拥有第一个字段。

如果您想支持基于文件的基因列表,可以使用此

$ awk -v d=';' 'NR==FNR {genes[$0]; next} 
                FNR==1; 
                        {for(g in genes) 
                           if(d $8 d ~ d g d) print}' genes file