查找有关 Perl 中每个键的最大哈希值



我有一个具有此结构的文件

>test1
MATRTQARGA 
>test2
MRIIEGKLQLQG
>test1
 MATRTQARGAVVELLYAFESGNEEIKKIASSML

在我想要的结果中

>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML

我在考虑一个哈希结构,其中键是带有>的行,每个>行之后的下一行将是值,然后对于每个键,我有点如何打印长度最长的字符串,但由于哈希结构不能有重复的键我不知道该怎么办

你不需要

重复的键,你只需要存储每个键的当前最长值,并在获得更长的键时替换它:

my %longest;
my $curkey;
while (<>) {
  chomp;
  if (/^>/) {
    $curkey = $_;
    $curkey =~ s/^.//; # Remove '>' prefix;
    next;
  } 
  if (length($_) > length($longest{$curkey})) {
    $longest{$curkey} = $_;
  }
}

另一种不太直观的方式

#!/usr/bin/env perl
use strict;
use Data::Dumper;
local $/ = ">"; # local not really needed here, as its in the global scope..
my %unqs;
while(<DATA>) {
    next if (m/^s*>/);
    my @arr = grep { not m/>|^s*$/ } split(/n/);
    $unqs{$arr[0]} = $arr[1] if (length($arr[1]) > length($unqs{$arr[0]}));
}
print Dumper(%unqs);
__DATA__
>test1
MATRTQARGA 
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML

现在您可以使用%unqs哈希并将其打印到文件中,您将最终得到您想要的。

最新更新