特定の列から引用符とタグ付きデータを抽出します。

特定の列から引用符とタグ付きデータを抽出します。

私は大きなものを持っていますGTFファイル、次のように:

 # ./stringtie -p 4 -G /home/humangenome_hg19/homo_gtf_file.gtf -o strAD1_as/transcripts.gtf -l strAD1 /home/software/star-2.5.2b/bin/Linux_x86_64/mapA1Aligned.sortedByCoord.out.bam                               
# StringTie version 1.3.2d                              
1   StringTie   transcript  30267   31109   1000    +   .   gene_id "strAD1.1"; transcript_id "strAD1.1.1"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.028725"; FPKM "0.053510"; TPM "0.109957";
1   StringTie   exon    30267   30667   1000    +   .   gene_id "strAD1.1"; transcript_id "strAD1.1.1"; exon_number "1"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.014218";
1   StringTie   exon    30976   31109   1000    +   .   gene_id "strAD1.1"; transcript_id "strAD1.1.1"; exon_number "2"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.072139";

gene_id9列には、およびtranscript_idのみreference_id含めたいと思いますref_gene_id。列9にあり、スペースで区切られています(列自体はタブで区切られています)。簡単なコマンドを使用してLinuxでこれらの列を作成する方法を教えてください。私はExcelを使用したくありません。

ベストアンサー1

理想的には、データはGTF形式であるため、GTFパーサーを使用して解析する必要があります。現在、このようなパーサーや解析ライブラリはインストールされていないため、私のソリューションはあなたが質問に提供したデータのみに基づいています。

列 9 を抽出するには、次のようにします。

$ cut -f 9 data.gtf
gene_id "strAD1.1"; transcript_id "strAD1.1.1"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.028725"; FPKM "0.053510"; TPM "0.109957";
gene_id "strAD1.1"; transcript_id "strAD1.1.1"; exon_number "1"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.014218";
gene_id "strAD1.1"; transcript_id "strAD1.1.1"; exon_number "2"; reference_id "ENST00000469289"; ref_gene_id "ENSG00000243485"; ref_gene_name "MIR1302-10"; cov "0.072139";

ここで目的のデータを取得するには、転写物とエクソンの属性がデータ内で異なる順序になっているため、別々に処理する必要があります。これを行いawk、現在の行に文字列が含まれているかどうかによって入力データとは異なるフィールドを出力しますexon_number

$ cut -f 9 data.gtf | awk '/exon_number/ { print $2, $4, $8, $10; next } { print $2, $4, $6, $8 }'
"strAD1.1"; "strAD1.1.1"; "ENST00000469289"; "ENSG00000243485";
"strAD1.1"; "strAD1.1.1"; "ENST00000469289"; "ENSG00000243485";
"strAD1.1"; "strAD1.1.1"; "ENST00000469289"; "ENSG00000243485";

次に二重引用符とセミコロンを削除します。

$ cut -f 9 data.gtf | awk '/exon_number/ { print $2, $4, $8, $10; next } { print $2, $4, $6, $8 }' | tr -d '";'
strAD1.1 strAD1.1.1 ENST00000469289 ENSG00000243485
strAD1.1 strAD1.1.1 ENST00000469289 ENSG00000243485
strAD1.1 strAD1.1.1 ENST00000469289 ENSG00000243485

おすすめ記事