長くて短いですが、選択した行の末尾をコピーしてその行にテキストを追加する方法はありますか?私が達成したいのはこれです。
私が所有しているもの
>13_gnd
atcg
>14_galF
atgc
私が望むもの
>13_gnd_gnd
atcg
>14_galF_galF
atgc
したがって、最後の単語で始まるすべての行をコピーして行の>
末尾に追加します。ありがとうございます。
答え1
$ sed 's/_[^_]*$/&&/' file
>13_gnd_gnd
atcg
>14_galF_galF
atgc
置換は、sed
各行の最後の下線とその後のすべての項目(行の最後まで)と一致します。これはパターンが_[^_]*$
実行することです(「アンダースコア以外の文字が後に続く可能性があるアンダースコアと行の末尾と一致する」)。そうだろう変えるこれは(下線付き)何でも2回一致します(&&
代替ビットの内容です)。
ファイルのようだからfasta形式、ゲノム配列には下線を含めることができないため、行の先頭>
に特別なテストは必要ありません。
答え2
短いアッ解決策:
awk -F'_' '$0~/^>/{ $0=$0 FS $NF }1' file
出力:
>13_gnd_gnd
atcg
>14_galF_galF
atgc
詳細:
-F'_'
- フィールド区切り記号$0~/^>/
- 行が次から始まる場合>
$0=$0 FS $NF
- 最後のフィールド値を最後に追加します。