さて,今度が最後の修正である。

 前のスクリプトでは,1行に2個の数値が書いてあるデータファイルしか処理できない。
 AWKは,読み込んだ行にフィールドがいくつあったかという情報を持っている変数 NF が定義されている。これを使えば,任意の個数のデータを含むデータファイルを処理することができる。

 ついでに,結果を表示するときにそれが何番目のデータについての結果なのかを表示するようにしておこう。


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

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

END {
	for (j = 1; j <= NF; j++) {
		subroutine(j)
	}
}

function subroutine(j,     i, mean, variance, sd)
{
	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 "Variable #%i\n",      j
	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
}


●前へ戻る   ●次へ進む
Last modified: May 15, 2002

E-mail to Shigenobu AOKI