summaryrefslogtreecommitdiff
path: root/mean_avg.awk
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mean_avg.awk22
1 files changed, 6 insertions, 16 deletions
diff --git a/mean_avg.awk b/mean_avg.awk
index 9864dae..945ed3c 100644
--- a/mean_avg.awk
+++ b/mean_avg.awk
@@ -1,4 +1,4 @@
-#!/usr/bin/awk
+#!/usr/bin/awk -f
### mean_avg.awk
# average columns of numerical data
@@ -20,7 +20,7 @@ NR == 1 {
}
# Welford's 'online' algorithm for variance
-NF != 0 {
+NF > 0 {
if (NF > max_nf)
max_nf = NF
for (n=1; n <= NF; n++) {
@@ -30,28 +30,18 @@ NF != 0 {
mean[n] = mean[n] + delta0[n]/count[n]
delta1[n] = $n - mean[n]
M2[n] = M2[n] + delta0[n]*delta1[n]
- if (count[n] > 1)
- var[n] = M2[n]/(count[n] - 1)
- else
- var[n] = "0"
+ (count[n] > 1) ? var[n] = M2[n]/(count[n] - 1) : var[n] = "0"
}
}
}
END {
- printf("\n")
- printf("%s, \t%s, %s, %s, %s\n", "col", "mean", "std_dev", "std_err", "count")
+ print "col", "mean", "std_dev", "std_err", "count"
for (n=1; n<=max_nf; n++) {
if (header[n])
- printf("%s, \t", header[n])
+ print header[n], mean[n], sqrt(var[n]), sqrt(var[n]/count[n]), count[n]
else
- printf("col_%g, \t", n)
- if (count[n]) {
- printf("%g, ±%g, ±%g, %g\n",
- mean[n], sqrt(var[n]), sqrt(var[n]/count[n]), count[n])
- }
- else
- printf(",,,,\n")
+ print "col_" n, mean[n], sqrt(var[n]), sqrt(var[n]/count[n]), count[n]
}
}