1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#!/usr/bin/env perl
eval "exec perl -sS $0 $*"
if 0;
$fmt = 0;
@fmts = (
"%33s %4s %4s %3s %4s %4s %4s %4s %4s %4s\n",
"%28s %6s %6s %5s %6s %7s %7s\n",
"%29s %5s %4s %5s %5s %5s %5s %4s\n",
"%30s %6s %6s %6s %8s %5s %7s\n",
"%28s %4s %4s %6s %6s %6s %6s %4s %5s\n",
"%29s %5s %6s %11s\n",
);
while (<>) {
print;
next unless /^Host/;
$_ = <>; print;
unless (/^-/) {
$_ = <>; print;
}
@values = ();
@a = @b = @c = @d = @e = @f = @g = @h = @i = @j = @k = ();
$i = 0;
while (<>) {
last if /^\s/;
print;
s/.......................\s+//;
($a[$i],$b[$i],$c[$i],$d[$i],$e[$i],$f[$i],$g[$i],$h[$i],$i[$i],$j[$i],$k[$i]) = split;
$i++;
}
$a = &sss(@a) if $#a != -1;
$b = &sss(@b) if $#b != -1;
$c = &sss(@c) if $#c != -1;
$d = &sss(@d) if $#d != -1;
$e = &sss(@e) if $#e != -1;
$f = &sss(@f) if $#f != -1;
$g = &sss(@g) if $#g != -1;
$h = &sss(@h) if $#h != -1;
$i = &sss(@i) if $#i != -1;
$j = &sss(@j) if $#j != -1;
$k = &sss(@k) if $#k != -1;
printf $fmts[$fmt], $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k;
print "\n";
exit if $fmt++ == $#fmts;
}
sub sss
{
local($tmp);
local(@values) = ();
local($n, $sum, $min, $max) = (0,0,1.7E+300,2.2E-300);
foreach $_ (@_) {
next unless /^\d/;
chop if /K$/;
push(@values, $_);
$sum += $_;
$min = $_ if $_ < $min;
$max = $_ if $_ > $max;
$n++;
}
return "" if $#values == -1;
# Do some statistics.
@s = sort(@values);
if ($n & 1) {
$median = $s[($n + 1)/2];
} else {
$i = $n / 2;
$median = ($s[$i] + $s[$i+1]) / 2;
}
$avg = $sum/$n;
$avgdev = $var = 0;
foreach $_ (@values) {
$var += ($_ - $median) ** 2;
$tmp = $_ - $median;
$avgdev += $tmp > 0 ? $tmp : -$tmp;
}
$var /= $n - 1;
$stddev = sqrt($var);
$avgdev /= $n;
#printf("%8s %8s %8s %8s %8s %4s %8s\n", "Min", "Max", "Average", "Median", "Std Dev", "%", "Avg Dev");
#printf "%8.2f %8.2f %8.2f %8.2f %8.2f %4.1f%% %8.2f\n", $min, $max, $avg, $median, $stddev, $stddev/$median*100, $avgdev;
$percent = $stddev/$median*100;
if ($percent > 90) {
printf "Huh: $percent $stddev $median @values\n";
}
if ($percent >= 10) {
return sprintf "%.0f%%", $percent;
} else {
return sprintf "%.1f%%", $percent;
}
}
|