" で始まらない行の文字を置き換えます。">

AWK は ">" で始まらない行の文字を置き換えます。

AWK は " で始まらない行の文字を置き換えます。">

.私はシーケンスデータで作業していますが、 ""で始まらない行で""を""に置き換えるために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は、nextfastaヘッダー行に会うたびにコードが実行されることです。これは、コードがヘッダーなしでシーケンスデータのみを生成することを意味します。シーケンスデータは問題ないようですが、あまり役に立ちません。

単にテストを否定し、nextブロックを削除すると(またはnextwithの前にprint)問題が解決しますawk。しかし、これは私の個人的な意見です。単一文字を音訳するために(またはin)を使用するよりもinコマンドを使用する方がyエレガントですsedgsub()s///gsed

おすすめ記事