use strict;
use warnings;
use List::Util qw{sum min max};
my %data;
while (<DATA>) {
chomp;
my ($id, $value) = split /,/;
push @{ $data{$id} }, $value; # store values as HoA
}
for my $id (sort keys %data) {
print "$id: " . summarise($data{$id});
}
sub summarise{
my $arr = shift;
return "max=" . max( @$arr )
. " min=" . min( @$arr )
. " sum=" . sum( @$arr )
. " mean=" . ( sum( @$arr )/scalar@$arr )
. "\n";
}
__DATA__
A,10
A,11
A,12
A,13
B,15
B,16
C,17
D,18
Gives:
A: max=13 min=10 sum=46 mean=11.5
B: max=16 min=15 sum=31 mean=15.5
C: max=17 min=17 sum=17 mean=17
D: max=18 min=18 sum=18 mean=18
NB: Code pretty much exactly the same as toolic's post... Just wanted to show TIMTOWTDI!
Just a something something...
|