私の問題は次のようになりますこれしかし、抽出したい部分がその行内にあるので、出力ではなく元のファイルの新しく作成された列にも保存したいと思います。
タブ区切りファイルの1行は次のとおりです。
chr1 25228613 25229157 CDS HAVANA . - 2 ID=CDS:ENST00000338888.3;Parent=ENST00000338888.3;gene_id=ENSG00000020633.18_3;transcript_id=ENST00000338888.3_2;gene_type=protein_coding;gene_name=RUNX3;transcript_type=protein_coding;transcript_name=RUNX3-202;exon_number=7;exon_id=ENSE00001384103.2;level=2;protein_id=ENSP00000343477.3;transcript_support_level=1;tag=basic,appris_alternative_2,CCDS;ccdsid=CCDS30633.1;havana_gene=OTTHUMG00000003316.1_3;havana_transcript=OTTHUMT00000009285.1_2;remap_original_location=chr1:-:24902122-24902666;remap_status=full_contig
$9から「gene_name」以降の内容を抽出したいと思います。この行はRUNX3です。
予想出力:
chr1 25228613 25229157 CDS HAVANA . - 2 ID=CDS:ENST00000338888.3;Parent=ENST00000338888.3;gene_id=ENSG00000020633.18_3;transcript_id=ENST00000338888.3_2;gene_type=protein_coding;gene_name=RUNX3;transcript_type=protein_coding;transcript_name=RUNX3-202;exon_number=7;exon_id=ENSE00001384103.2;level=2;protein_id=ENSP00000343477.3;transcript_support_level=1;tag=basic,appris_alternative_2,CCDS;ccdsid=CCDS30633.1;havana_gene=OTTHUMG00000003316.1_3;havana_transcript=OTTHUMT00000009285.1_2;remap_original_location=chr1:-:24902122-24902666;remap_status=full_contig RUNX3
awkまたはsedを使用してこれをどのように実行できますか?
ベストアンサー1
これで区切り文字がわかりましたので、区切り記号を分割して再グループ化してください。
sed -Ei 's/(.*gene_name=)([^;]*)(;.*)/\1\2\3\t\2/g' gene
に分かれています。
(.*gene_name=)
gene_name タグまでのすべての文字列は変数 1 に入ります。
([^;]*)
;変数2に入る前のすべての連続文字
(;.*)
文字列の残りの部分は変数3に入ります。
\1\2\3\t\2
タブと追加された遺伝子を使用して文字列を再構築します。
編集する
または@Weijunが言ったように
\0\t\2
他の編集者
コードゴルフ
sed -Ei 's/.*gene_name=([^;]*).*/\0\t\1/g' gene