2017-08-06 8 views
0

誰かがAWKの問題を助けてくれますか? 私は以下のような大きなGTFファイルを持っています。第9フィールドには、使用したいgene_idが含まれています。別のファイルに基づいてtxt(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を持つ別のファイルを持っています。

NM_000017 
NM_000019 
NM_000024 
NM_000033 
NM_000034 

FILE2.TXT

私は維持したいgene_idと行のフィルタリングfile1のように置くアウトをしたいと思います。 Pythonの他のソリューションも高く評価されます。 ありがとうございます!

+1

最終結果を – RomanPerekhrest

+0

に投稿し、これまでに試したことがあります。 –

答えて

1

次のことを試してください:

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

まずfile1.gtf上のすべてのレコードに対してのみフィールド$ 2(スプリット場合行を印刷、あなたはFILE2.TXTからフィルタリングしたいのIDを持つ配列を作成しますレコードby ")は配列内のIDの1つです

+1

ids 'file2.txt file1.gtf'の中で、もっと一般的に 'awk -F'" '' NR == FNR {ids [$ 1]; next} $ 2と書かれています。しかし、望ましくない$ 2のfile1.gtf。右の考え。 –

+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 
関連する問題