1

それで、何ヶ月も試みては失敗し、一般的に立ち往生した後、私はついに外に出て外部の助けを求めることにしました. 私はまだ perl で新しいトリックを学んでおり、ここの誰かが私を助けてくれることを願っています。

次の形式の種があります。

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

これらの系統のうち、同じ種名 (ホモ サピエンスなど) を含むが、アミノ酸配列が異なるものがあります。これが、技術的には正確な重複ではないため、ハッシュまたはその他の方法で重複を削除できない理由です。

重複した種名を削除するか印刷しない方法が必要ですが、出力ファイルには上記で指定した形式が含まれています。したがって、異なるアミノ シーケンスまたは # を持つホモ サピエンスが 3 回出現した場合、対応するシーケンスを持つホモ サピエンス (どちらでもかまいませんが、ランダムである可能性があります) を 1 つだけ含むように出力する必要があります。

正しい方向への助けや指摘は大歓迎です! 私が質問について十分に明確であることを願っています。読んでくれてありがとう!: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 に答える