22.9.15

Calculate variance and standard deviation using Welford's algorithm and AWK

boo="1 2 3 4 5 6 0.257143 0.278571 0.285714 0.271429 0.235714";
awk '{
  sum = 0;
  M = 0;
  S = 0;
  for (k=1; k <= NF; k++) {
    sum += $k;
    x = $k;
    oldM = M;
    M = M + ((x - M)/k);
    S = S + (x - M)*(x - oldM);
  }
  var = S/(NF - 1);
  print "n=" NF " mean=" sum/(NF) " var=" var " sd=" sqrt(var);
}' <<< $boo


n=11 mean=2.02987 var=4.60305 sd=2.14547