行末のテキストをコピーして貼り付ける

行末のテキストをコピーして貼り付ける

長くて短いですが、選択した行の末尾をコピーしてその行にテキストを追加する方法はありますか?私が達成したいのはこれです。

私が所有しているもの

>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- 最後のフィールド値を最後に追加します。

関連情報