File: opercent

package info (click to toggle)
lmbench 3.0-a9%2Bdebian.1-3
  • links: PTS
  • area: non-free
  • in suites: bullseye
  • size: 2,752 kB
  • sloc: ansic: 12,328; perl: 6,531; sh: 3,965; makefile: 730
file content (92 lines) | stat: -rwxr-xr-x 2,184 bytes parent folder | download | duplicates (5)
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;
	}
}