Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk使用另一个捕获所有实例来筛选文件_Awk - Fatal编程技术网

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匹配。这对您的数据集可能不是问题,但最好是安全的。非常感谢,这很有帮助:)。