有人可以帮我解决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中的其他解决方案也将受到赞赏。 提前谢谢!
答案 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