#!/usr/local/bin/perl

# Given the output of repeat.pl as stdin, produce interesting stats.

$start = 1;

while (<STDIN>) {
    if (/^Duration.*/ ) {
	
	if ($start != 1) {
	    # Compute stats
	    do_stats (@sums, @counts, 
		      @col0, @col1, @col2, @col3, @col4, @col5, @col6);
    
	} else {
	    $start = 0;
	}

	print;
	@sums   = (0, 0, 0, 0, 0, 0, 0);
	@counts = (0, 0, 0, 0, 0, 0, 0);
	@col0 = ();
	@col1 = ();
	@col2 = ();
	@col3 = ();
	@col4 = ();
	@col5 = ();
	@col6 = ();

    } else {
	print;
	if (/([\.\d]+)\D+([\.\d]+)\D+([\.\d]+)\D+([\.\d]+)\D+([\.\d]+)\D+([\.\d]+)\D+([\.\d]+)\D+/) {

	    $sums[0] += $1;
	    $sums[1] += $2;
	    $sums[2] += $3;
	    $sums[3] += $4;
	    $sums[4] += $5;
	    $sums[5] += $6;
	    $sums[6] += $7;
	    
	    push @col0, ($1);
	    push @col1, ($2);
	    push @col2, ($3);
	    push @col3, ($4);
	    push @col4, ($5);
	    push @col5, ($6);
	    push @col6, ($7);

	    $counts[0]++;
	    $counts[1]++;
	    $counts[2]++;
	    $counts[3]++;
	    $counts[4]++;
	    $counts[5]++;
	    $counts[6]++; 

	}
    }
}


do_stats (@sums, @counts, 
	  @col0, @col1, @col2, @col3, @col4, @col5, @col6);
exit;

sub do_stats {
    my($sums, $counts, $col0, $col1, $col2, $col3, $col4, $col5, $col6) = @_;
    
    $avg0 = $sums[0] / $counts[0];
    $avg1 = $sums[1] / $counts[1];
    $avg2 = $sums[2] / $counts[2];
    $avg3 = $sums[3] / $counts[3];
    $avg4 = $sums[4] / $counts[4];
    $avg5 = $sums[5] / $counts[5];
    $avg6 = $sums[6] / $counts[6];
    
    printf ("Averages:\n");
    printf ("%10d %10d %10f %6lu %6lu %14f %14f\n",
	    $avg0,
	    $avg1,
	    $avg2,
	    $avg3,
	    $avg4,
	    $avg5,
	    $avg6);
    
    @sort0 = sort {$a <=> $b} @col0;
    @sort1 = sort {$a <=> $b} @col1;
    @sort2 = sort {$a <=> $b} @col2;
    @sort3 = sort {$a <=> $b} @col3;
    @sort4 = sort {$a <=> $b} @col4;
    @sort5 = sort {$a <=> $b} @col5;
    @sort6 = sort {$a <=> $b} @col6;
    
    printf ("Minimum and 100*(avg - min)/avg:\n");
    printf ("%10d %10d %10f %6lu %6lu %14f %14f\n",
	    $sort0[0],
	    $sort1[0],
	    $sort2[0],
	    $sort3[0],
	    $sort4[0],
	    $sort5[0],
	    $sort6[0]);
    printf ("%10.2f%% %9.2f%% %9.2f%% %5.2f%% %5.2f%% %13.2f%% %13.2f%%\n",
	    100*($avg0 - $sort0[0])/$avg0,
	    100*($avg1 - $sort1[0])/$avg1,
	    100*($avg2 - $sort2[0])/$avg2,
	    100*($avg3 - $sort3[0])/$avg3,
	    100*($avg4 - $sort4[0])/$avg4,
	    100*($avg5 - $sort5[0])/$avg5,
	    100*($avg6 - $sort6[0])/$avg6);
    
    
    printf ("Maximum and 100*(max - avg)/avg:\n");
    printf ("%10d %10d %10f %6lu %6lu %14f %14f\n",
	    $sort0[$#col0],
	    $sort1[$#col1],
	    $sort2[$#col2],
	    $sort3[$#col3],
	    $sort4[$#col4],
	    $sort5[$#col5],
	    $sort6[$#col6]);
    
    printf ("%10.2f%% %9.2f%% %9.2f%% %5.2f%% %5.2f%% %13.2f%% %13.2f%%\n\n\n",
	    100*($sort0[$#col0] - $avg0)/$avg0,
	    100*($sort1[$#col1] - $avg1)/$avg1,
	    100*($sort2[$#col2] - $avg2)/$avg2,
	    100*($sort3[$#col3] - $avg3)/$avg3,
	    100*($sort4[$#col4] - $avg4)/$avg4,
	    100*($sort5[$#col5] - $avg5)/$avg5,
	    100*($sort6[$#col6] - $avg6)/$avg6);
}




