awkまたはsedを使用して特定のパターンの部分行を抽出し、新しいフィールドに保存する

awkまたはsedを使用して特定のパターンの部分行を抽出し、新しいフィールドに保存する

私の問題は次のようになりますこれしかし、抽出したい部分がその行内にあるので、出力ではなく元のファイルの新しく作成された列にも保存したいと思います。

タブ区切りファイルの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

おすすめ記事