前のスクリプトでは,せっかく入力し格納したデータを全部利用していないので,1番目,2番目,3番目のデータを処理するためには結局毎回スクリプトを修正しなくてはならない。

 入力した全てのデータを処理するためには,ENDパターンに対応するアクションの中での処理の部分もfor文で囲んでやればよい。


#!/usr/local/bin/gawk -f

{
	for (j = 1; j <= 2; j++) {
		data[FNR,j] = $j
	}
}

END {
	for (j = 1; j <= 2; j++) {
		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
	}
}

 このスクリプトの実行結果は次のようになる。
N                      10
Mean             5.500000
Variance         8.250000
S.D.             2.872281
N                      10
Mean             16.05000
Variance         9.377500
S.D.             3.062270
 結果が変だ。平均値は15.5になるはずなのに。何か忘れていることがある。
●前へ戻る   ●次へ進む
Last modified: May 15, 2002

E-mail to Shigenobu AOKI