]> mj.ucw.cz Git - netgrind.git/blob - post/average
A simple averaging tool.
[netgrind.git] / post / average
1 #!/usr/bin/perl
2 # Simple averages and medians
3 # (c) 2003 Martin Mares <mj@ucw.cz>, GPL'ed
4
5 use strict;
6 use warnings;
7
8 `sort >avg.tmp`; $? && die;
9 open I, "avg.tmp" or die;
10 my $n = 0;
11 my $sum = 0;
12 my $max = 0;
13 my $min;
14 while (<I>) {
15         chomp;
16         $n++;
17         $sum += $_;
18         $max = $_;
19         $min = $_ if !defined $min;
20 }
21 $n || die "No data found";
22 seek(I, 0, 0);
23 my $median = 0;
24 for (my $i=0; $i<$n/2; $i++) {
25         $median = <I>;
26         chomp $median;
27 }
28 my $avg = $sum/$n;
29 my $qsum = 0;
30 seek (I, 0, 0);
31 while (<I>) {
32         chomp;
33         my $d = $_ - $avg;
34         $qsum += $d*$d;
35 }
36 my $var = $qsum/$n;
37 my $stdd = sqrt($var);
38 printf "Number of records:      %d\n", $n;
39 printf "Average:                %.3f\n", $avg;
40 printf "Variance:               %.3f\n", $var;
41 printf "Std. deviation:         %.3f\n", $stdd;
42 printf "Median:                 %.3f\n", $median;
43 printf "Minimum:                %.3f\n", $min;
44 printf "Maximum:                %.3f\n", $max;
45 ;