0

perl スクリプトでは、いくつかの文字列を置き換える必要があります。現時点では、次を使用しています。

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/\>$1/g;

目的は、すべてのシーケンス名を FASTA ファイルにフォーマットすることです。私の場合はうまく機能するので、この部分に触れる必要はありません。ただし、シーケンス名がファイル内で複数回出現することがあります。最後に同じシーケンス名を 2 回以上付けてはなりません。したがって、たとえば次のものが必要です。

seqName1
seqName2
etc.

(seqName、seqName などの代わりに)

これは、発生するたびに自動的に異なる方法で処理することは可能ですか? 似たような名前がある場合など、シーケンスがいくつあるかわかりません。たとえば、発生するたびにランダムな文字列を連結するというアイデアがあるため、私の質問です。

どうもありがとう。


John はそれを完全に解決し、chepner は競合を回避するための賢明なアイデアを支援しました。最終的な結果は次のとおりです。

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/
    sub {
        return '>'.$1.$i++;
    }->();
/eg;

大変感謝します。

4

1 に答える 1

4

私は実際に先日このようなことをしようとしていました, これが私が思いついたものです

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/

    sub {

        # return random string

    }->();

/eg;

\e修飾子は置換をテキストではなくコードとして解釈します。いつでも戻ることができるように、匿名のコード ref を使用します。

于 2012-08-02T15:06:27.347 に答える