blob: c1d31a6155011a6e6b1dccede07648e388ccc08c (
plain) (
blame)
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
|
#!/usr/bin/awk -f
### mean.awk
# calculate mean average
BEGIN {
sign = "[+-±]?"
decimal = "[0-9]+[.]?[0-9]*"
fraction = "[.][0-9]*"
exponent = "([Ee]" sign "[0-9]+)?"
number = "^" sign "(" decimal "|" fraction ")" exponent "$"
}
# Welford's 'online' algorithm for variance
NF > 0 {
for (m=1; m<=NF; m++) {
if (m ~ number) {
count += 1
delta0 = $m - mean
mean = mean + delta0/count
delta1 = $m - mean
M2 = M2 + delta0*delta1
if (count > 1)
var = M2/(count - 1)
else
var = "nan"
}
}
}
END {
print "mean", "std_dev", "std_err", "count"
print mean, sqrt(var), sqrt(var/count), count
}
|