Perl 如何打印每个标题下具有最大值的结果?
我有如下数据和perl代码。我试图在每个标题(>dna1,>dna2)下找到具有最大分数(最后一列)的字母组合并打印它。我用Perl编写了如下代码:Perl 如何打印每个标题下具有最大值的结果?,perl,Perl,我有如下数据和perl代码。我试图在每个标题(>dna1,>dna2)下找到具有最大分数(最后一列)的字母组合并打印它。我用Perl编写了如下代码: use strict; use warnings; my ($line); my $max = 0; my @prediction; foreach my $line (<DATA>) { chomp($line); if ($line =~ /^>/) { print "$line"; }
use strict;
use warnings;
my ($line);
my $max = 0;
my @prediction;
foreach my $line (<DATA>) {
chomp($line);
if ($line =~ /^>/) {
print "$line";
}
else {
my @split = split(/\s+/,$line);
my $score = pop @split;
if ($max < $score) {
$max = $score;
@prediction = @split;
push @prediction, $max;
}
#print "$domain\n";
}
print "@prediction\n";
}
__DATA__
>dna1
D 124.6
D T 137.5
G -3.4
G T 9.5
T 12.9
>dna2
A 196.3
A K 186.5
A K H 192.7
A H M 206.2
A M 200
>dna1
D T 137.5
>dna2
A H M 206.2
你能帮我弄清楚我怎样才能得到最终组合的最大分数,如下所示:
use strict;
use warnings;
my ($line);
my $max = 0;
my @prediction;
foreach my $line (<DATA>) {
chomp($line);
if ($line =~ /^>/) {
print "$line";
}
else {
my @split = split(/\s+/,$line);
my $score = pop @split;
if ($max < $score) {
$max = $score;
@prediction = @split;
push @prediction, $max;
}
#print "$domain\n";
}
print "@prediction\n";
}
__DATA__
>dna1
D 124.6
D T 137.5
G -3.4
G T 9.5
T 12.9
>dna2
A 196.3
A K 186.5
A K H 192.7
A H M 206.2
A M 200
>dna1
D T 137.5
>dna2
A H M 206.2
谢谢 以下内容产生了预期的输出:
#!/usr/bin/perl
use warnings;
use strict;
my ($max_score, $max_combination);
while (my $line = <DATA>) {
if ($line =~ /^>/) {
print "$max_combination $max_score\n" if $max_combination;
print $line;
$max_score = 0;
} elsif (my ($combination, $score) = $line =~ /(.*)\s+([0-9.]+)/) {
if ($score > $max_score) {
$max_score = $score;
$max_combination = $combination;
}
}
}
print "$max_combination $max_score\n";
#/usr/bin/perl
使用警告;
严格使用;
我的($max_分数,$max_组合);
while(我的$line=){
如果($line=~/^>/){
如果$max\u组合,则打印“$max\u组合$max\u分数\n”;
打印$行;
$max_得分=0;
}elsif(我的($combination,$score)=$line=~/(.*)\s+([0-9.]+)/){
如果($score>$max_score){
$max_分数=$score;
$max_组合=$combination;
}
}
}
打印“$max\u组合$max\u分数\n”;
主要区别在于,您只需要在新组开始时或在最末尾打印结果。将$line更改为$是一种倒退IMO@LingZhang您是否了解它是如何工作的,以及为什么您的代码不工作的?“如果不是的话,也许乔洛巴可以加上一个解释。”我吓坏了外星人。谢谢你的提醒。是的,我明白。在我的代码中,我使用了foreach,所以在每次迭代中打印带有max score的组合。Choroba在这里使用了“while”,我可以在每个新组之前打印最终结果。再次感谢。@LingZhang
foreach
和while
只是遍历数组的方法——choroba的代码可以用foreach
循环重写。代码的问题在于,您每行都打印结果,而不是在每个“部分”的末尾。