根据另一个文件过滤txt(GTF)文件

时间:2017-08-06 00:52:07

标签: python awk

有人可以帮我解决AWK问题吗? 我有一个像下面这样的大型GTF文件。第9个字段包含我想要使用的gene_id。

file1.gtf

chr1  hg38_refGene  exon         67127166   67127257   0.000000  -  .  gene_id  "NR_075077";  transcript_id  "NR_075077";
chr1  hg38_refGene  exon         67131142   67131227   0.000000  -  .  gene_id  "NR_075077";  transcript_id  "NR_075077";
chr1  hg38_refGene  exon         67134930   67134971   0.000000  -  .  gene_id  "NR_075077";  transcript_id  "NR_075077";
chr1  hg38_refGene  start_codon  201283703  201283705  0.000000  +  .  gene_id  "NM_000299";  transcript_id  "NM_000299";
chr1  hg38_refGene  CDS          201283703  201283904  0.000000  +  0  gene_id  "NM_000299";  transcript_id  "NM_000299";
chr1  hg38_refGene  exon         201283452  201283904  0.000000  +  .  gene_id  "NM_000299";  transcript_id  "NM_000299";

然后我有另一个文件,其中包含我想要从其余部分过滤掉的所有gene_id。

FILE2.TXT

NM_000017
NM_000019
NM_000024
NM_000033
NM_000034

我希望out out是一个过滤的file1,其中包含我想保留的gene_id行。 python中的其他解决方案也将受到赞赏。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

请尝试以下方法:

awk -F'"' 'NR==FNR { ids[$1]=1;next } ids[$2]' file2.txt file1.gtf

首先使用要从file2.txt过滤的ID创建一个数组,然后对于file1.gtf上的每个记录,只有字段$ 2(拆分记录为“)”是数组中的ID之一才打印该行。

答案 1 :(得分:0)

尝试关注awk并告诉我这是否对您有所帮助,它会保存file1.gif和file2.gif中常见的ID,并将输出保存到同一个file1.gif中。

awk 'FNR==NR{array[$2]=$0;next} array[$1]{print array[$1]}' FS='"' file1.gif file2.txt > temp_file  && mv temp_file file1.gif