0

在 perl 脚本中,我需要替换几个字符串。目前,我使用:

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

目的是在 FASTA 文件中格式化每个序列名称。它在我的情况下效果很好,所以我不需要触摸这部分。但是,一个序列名称会在文件中出现多次。最后我不能有两次 - 或更多 - 相同的序列名称。因此,我需要例如:

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替换解释为代码,而不是文本。我使用匿名代码参考,以便我可以随时返回。

于 2012-08-02T15:06:27.347 回答