#!/usr/bin/perl -w use strict; use warnings; my %servers = ( 'server1' => 'cluster1', 'server2' => 'cluster1', 'server3' => 'cluster2', 'server4' => 'cluster2' ); my %values = ( 'server1' => 20.00, 'server2' => 10.00, 'server3' => 5.00, 'server4' => 15.00, ); my %cluster_count; # # Here is where you fill in values, such that... # # $values{'server1'} = # $values{'server2'} = # ... etc ... # # But, I'm going to cheat and do ... %values = ( 'server1' => 20.00, 'server2' => 10.00, 'server3' => 5.00, 'server4' => 15.00, ); my %results_by_cluster; # # Calculate results by cluster, and save cluster counts (this is # necessary for the calculation of averages). # foreach my $srvr (keys (%servers)) { my $cluster = $servers{$srvr}; ++$cluster_count{$cluster}; $results_by_cluster{$cluster} += $values{$srvr}; } # # Display results # foreach my $cluster (qw(cluster1 cluster2)) { my $avg = $results_by_cluster{$cluster} / $cluster_count{$cluster}; printf "%20.20s average is: %f\n", $cluster, $avg; }