在perl中查找部分重复项

时间:2013-08-01 16:43:39

标签: perl duplicates partial

因此经过几个月的尝试和失败以及被困后,我终于决定出去寻求外界的帮助。我还在学习perl中的新技巧,希望有人能帮助我,所以不用多说...

我的物种格式为:

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

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

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

任何帮助或指向正确方向的人都将不胜感激!希望我对这个问题很清楚。谢谢你的阅读! :d

1 个答案:

答案 0 :(得分: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)