我有一个具有此结构的文件
>test1
MATRTQARGA
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML
在我想要的结果中
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML
我在想一个哈希结构哪些键是>并且每个>行之后的下一行将是值,然后对于每个键我有些如何打印具有最长长度的字符串,但由于哈希结构不能具有重复键,我不知道该怎么做
答案 0 :(得分:2)
您不需要重复键,只需存储每个键的当前最长值,并在获得更长的键时替换它:
my %longest;
my $curkey;
while (<>) {
chomp;
if (/^>/) {
$curkey = $_;
$curkey =~ s/^.//; # Remove '>' prefix;
next;
}
if (length($_) > length($longest{$curkey})) {
$longest{$curkey} = $_;
}
}
答案 1 :(得分:-1)
另一种不那么直观的方式
#!/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
哈希并将其打印到文件中,最终会得到您想要的内容。