- 论坛徽章:
- 145
|
回复 4# 清泉一边
You can do this way if you had sorted data already
$ cat rate.pl
use strict;
use warnings;
my $sKey = "";
my $sTotal = 0;
my @aTemp = ();
sub output{
my ($sTotal, @aTemp) = @_;
foreach(@aTemp){
print join("\t", @{$_}, $_->[-1] / $sTotal) . "\n";
}
}
while(<DATA>){
my @aData = split;
if($sKey eq $aData[0]){
push @aTemp, \@aData;
$sTotal += $aData[-1];
next;
}
if($sKey ne ""){
output($sTotal, @aTemp);
}
@aTemp = (\@aData);
$sTotal = $aData[-1];
$sKey = $aData[0];
}
output($sTotal, @aTemp);
# Note: all data have sorted already
__DATA__
a 6 20
a 7 80
b 2 30
b 3 70
$ perl rate.pl
a 6 20 0.2
a 7 80 0.8
b 2 30 0.3
b 3 70 0.7
|
|