1

因此,经过数月的尝试和失败以及普遍陷入困境后,我终于决定走出去寻求外部帮助。我还在学习 perl 的新技巧,希望这里的人可以帮助我,所以事不宜迟......

我有以下格式的物种:

>gi|###|...|...|...[species name] amino acid sequence

在这些行中,我将有一些包含相同的物种名称(如智人),但氨基酸序列不同。这就是为什么我不能通过哈希或其他方式删除重复项,因为从技术上讲,它们不是完全重复的。

我需要一种方法来删除或不打印重复的物种名称,但让我的输出文件包含上面指定的格式。因此,如果我有 3 次出现具有不同氨基序列或 # 的智人,我需要我的输出只包含一个智人(不管哪个,可以是随机的)及其对应的序列。

任何帮助或指向正确方向将不胜感激!希望我对这个问题足够清楚。感谢您的阅读!:D

4

1 回答 1

4

当然你可以使用哈希。只需要使用正确的密钥。

my %seen;
while (<>) {
    chomp;
    my @fields = split /\|/;
    my ($species) = $fields[4] =~ /\[([^\]]+)\]/ or die;
    print "$_\n" if !$seen{$species}++;
}

示例输入:

>gi|###|[1](A)
>gi|###|[2](B)
>gi|###|[1](C)
>gi|###|[1](D)
>gi|###|[2](E)
>gi|###|[3](F)
>gi|###|[3](F)

输出:

>gi|###|[1](A)
>gi|###|[2](B)
>gi|###|[3](F)
于 2013-08-01T16:51:27.247 回答