2017-08-06 79 views
0

有人可以帮我解决AWK问题吗? 我有一个像下面这样的GTF文件。第9个字段包含我想要使用的gene_id。根据另一个文件筛选文本文件(GTF)

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 

我想出去放是一个过滤的文件1与gene_id我想继续行。在python中的其他解决方案也将不胜感激。 提前谢谢!

+1

发布最终结果 – RomanPerekhrest

+0

以及您到目前为止所尝试的内容。 –

回答

1

请尝试以下方法:

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

首先创建一个阵列,你想从FILE2.TXT过滤的ID,然后在file1.gtf每个记录仅打印行如果字段$ 2(分流记录“)是阵列中的一个ID

+1

更常用的'awk -F''''NR == FNR {ids [$ 1]; next} $ 2在ids'file2.txt file1.gtf'中,所以你不会在每个'ids []'中创建条目file1.gtf中不需要的$ 2,但是想法正确 –

+1

@EdMorton感谢您的深刻反馈! – archemiro

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 
相关问题