" で始まらない行の文字を置き換えます。">
.
私はシーケンスデータで作業していますが、 ""で始まらない行で""を""に置き換えるためにawkを使用する正しい方法を愚かに見つけることができません。 sedの代わりにawkを使用する必要があります。X
>
これまで持っていますが、「.」をすべて置き換えたのは次のとおりです。
awk '/^>/ {next} {gsub(/\./,"X")}1' Sfr.pep > Sfr2.pep
サブデータの例:
>sequence.1
GTCAGTCAGTCA.GTCAGTCA
私が得たい結果:
>sequence.1
GTCAGTCAGTCAXGTCAGTCA
ベストアンサー1
そうすることがより自然に見えますsed
。
sed '/^>/!y/./X/' Sfr.pep >Sfr2.pep
^>
これは現在の行と一致します(「行は>
文字で始まりますか?」)。この表現があればいいえmatch、このy
コマンドは線の各点をに変更するために使用されますX
。
テスト:
$ cat Sfr.pep
>sequence.1
GTCAGTCAGTCA.GTCAGTCA
$ sed '/^>/!y/./X/' Sfr.pep >Sfr2.pep
$ cat Sfr2.pep
>sequence.1
GTCAGTCAGTCAXGTCAGTCA
コードの主な問題awk
は、next
fastaヘッダー行に会うたびにコードが実行されることです。これは、コードがヘッダーなしでシーケンスデータのみを生成することを意味します。シーケンスデータは問題ないようですが、あまり役に立ちません。
単にテストを否定し、next
ブロックを削除すると(またはnext
withの前にprint
)問題が解決しますawk
。しかし、これは私の個人的な意見です。単一文字を音訳するために(またはin)を使用するよりもinコマンドを使用する方がy
エレガントですsed
。gsub()
s///g
sed