前に,「変数を最初に使うときにはその内容は空文字列,数値として見たときは0になっている」といった。

 前のスクリプトで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 = variance = 0 で mean と variance を0にしている。これは,
	mean = 0 
	variance = 0 
のように,分けて書くのと同じ意味である。
●前へ戻る   ●次へ進む
Last modified: May 15, 2002

E-mail to Shigenobu AOKI