my %partitions; while ( ... my @cols = split(',', $line); my $pname = "$cols[0]:$cols[2]"; $partitions{$pname} ||= []; push @{$partitions{$pname}}, $cols[3]; } #### use List::Util qw(sum); for my $pname (sort keys %partitions) { my $count = scalar @{$partition{$pname}}; my $sum = sum @{$partition{$pname}}; my $mean = $sum/$count; # std dev is left as an exercise }