awk使用另一个捕获所有实例来筛选文件
在下面的awk使用另一个捕获所有实例来筛选文件,awk,Awk,在下面的awk中,我试图捕获KCNMA1的所有条件,即文件的$8中选项卡分隔的中的gene行(一列名称列表) 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 46
awk
中,我试图捕获KCNMA1
的所有条件,即文件的$8
中选项卡分隔的中的gene
行(一列名称列表)
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 .
4633 chr10 89397777 89397777 - GAA exonic NONE;X1X;KCNMA1 .
因此,在下面的示例中,KCNMA1
出现在$8
中的所有实例/行都将打印到输出中
也可能有多个代码>,但在本例中,将包括名称KCNMA1
。awk
似乎捕获了可能的4种情况中的2种,但并非当前输出所示的所有情况。谢谢:)
基因
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 .
文件
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
awk -F'\t' 'NR==FNR{a[$0];next} FNR==1{print} {x=$8; sub(/;.*/,"",x)} x in a{$1=++c; print}' gene file > out
对于单个基因,只需作为变量传递即可
$ 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
不知道为什么-1
,以为我包括了所有的细节,但经过编辑。谢谢你:)。我想这对你有用:哦,非常感谢。因此,gene
每行中的所有文本都被读入数组g
和d=
告诉awk
一个代码>可能在每行中。如果它只是在文件的$8
中的数组g
中查找任何字符串。我很抱歉,如果我的理解不正确,我正在努力学习。非常感谢:)这是为了消除子字符串匹配,例如,假设您正在查找“CNMA”,您不想与KCNMA1匹配。这对您的数据集可能不是问题,但最好是安全的。非常感谢,这很有帮助:)。