my @columns_to_group_on = (2, 3);
my @columns_to_average = (5, 6);
####
my $group = join("/", @columns[@columns_to_group_on]);
my @row = @columns[@columns_to_average];
####
++$data{$group}{ROWCNT};
$data{$group}{SUMS}[$_] += $row[$_] for 0 .. $#row;
####
my @avg = [ map { $_/$data{$group}{ROWCNT} } @{$data{$group}{SUMS}} ];
print "GROUP $group: [", join(", ", @avg), "]\n";
####
$ perl pm_121222.pl
Collecting the data into groups:
1: xxxx A 1 G L -135.185 178.150 179.885 0.000 0.000 0.000 1 0.000 P 1 F 1
2: xxxx A 2 S L -49.668 -31.158 177.985 0.000 0.000 0.000 1 0.000 P 1 F 1
3: xxxx A 3 M L -84.632 -45.215 177.518 0.000 0.000 0.000 1 0.000 P 1 F 1
4: xxxx A 1 G L -115.240 -69.349 -171.360 0.000 0.000 0.000 1 0.000 P 1 F 2
5: xxxx A 2 S L -84.776 -143.809 173.303 0.000 0.000 0.000 1 0.000 P 1 F 2
6: xxxx A 3 M L -50.674 158.544 177.747 0.000 0.000 0.000 1 0.000 P 1 F 2
7: xxxx A 1 G L -106.682 126.232 177.885 0.000 0.000 0.000 1 0.000 P 1 F 3
8: xxxx A 2 S L -20.124 24.502 -179.585 0.000 0.000 0.000 1 0.000 P 1 F 3
9: xxxx A 3 M L -60.092 2.018 -178.549 0.000 0.000 0.000 1 0.000 P 1 F 3
10: xxxx A 1 G L -115.172 -16.017 -179.179 0.000 0.000 0.000 1 0.000 P 1 F 4
11: xxxx A 2 S L -143.860 148.913 -179.781 0.000 0.000 0.000 1 0.000 P 1 F 4
12: xxxx A 3 M L -81.755 -23.354 -174.564 0.000 0.000 0.000 1 0.000 P 1 F 4
13: xxxx A 1 G L -71.907 147.690 -178.617 0.000 0.000 0.000 1 0.000 P 1 F 5
14: xxxx A 2 S L -81.417 52.986 179.983 0.000 0.000 0.000 1 0.000 P 1 F 5
15: xxxx A 3 M L -83.126 -56.051 178.109 0.000 0.000 0.000 1 0.000 P 1 F 5
Generating the report:
GROUP 1/G AVGS [-108.8372, 73.3412]
GROUP 2/S AVGS [-75.969, 10.2868]
GROUP 3/M AVGS [-72.0558, 7.1884]