diff options
| author | wukong <wukong@longaeva> | 2018-06-13 21:41:39 -0700 |
|---|---|---|
| committer | wukong <wukong@longaeva> | 2018-06-13 21:41:39 -0700 |
| commit | 8875b420a873a360a9484778b487394add318a5e (patch) | |
| tree | d357816354c5d9d4bc3b1db5c43ceda7933b5e3f /mean_avg.awk | |
| parent | 6bb6be845b6099550e0a530217633e30522093ad (diff) | |
added shebang, replaced if-elses with shortcut notation, ported online mean and variance calc to mean.awk
Diffstat (limited to 'mean_avg.awk')
| -rw-r--r-- | mean_avg.awk | 22 |
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] } } |
