my %vals_by_type; while () { chomp; my ($type, $val) = split ' '; push @{ $vals_by_type{$type} }, $val; } #### use List::Util qw( sum ); for my $type (sort keys %vals_by_type) { my $vals = $vals_by_type{$type}; my $avg = sum( map $_/@$vals, @$vals ); printf("%s %.2f\n", $type, $avg); }