前のスクリプトで1番目のデータを処理するとき,mean,variance の内容は0であるが,2番目のデータを処理するときにはもはや0ではない。そこへ足し算をしていっても正しい答えは得られない。「ご破算で願いましては...」ということで,mean,variance を0クリアしておかないといけない。
#!/usr/local/bin/gawk -f { for (j = 1; j <= 2; j++) { data[FNR,j] = $j } } END { for (j = 1; j <= 2; j++) { mean = variance = 0 for (i = 1; i <= FNR; i++) { mean += data[i,j] } mean /= FNR for (i = 1; i <= FNR; i++) { variance += (data[i,j]-mean)^2 } variance /= FNR sd = sqrt(variance) printf "N %15.7g\n", FNR printf "Mean %#15.7g\n", mean printf "Variance %#15.7g\n", variance printf "S.D. %#15.7g\n", sd } }
mean = 0 variance = 0のように,分けて書くのと同じ意味である。