ここで,少し準備をしよう。

 2番目のデータの平均値などを求めるためのスクリプトを示す。


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

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

END {
	for (i = 1; i <= FNR; i++) {
		mean += data[i,2]
	}
	mean /= FNR

	for (i = 1; i <= FNR; i++) {
		variance += (data[i,2]-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
}

{
	for (j = 1; j <= 2; j++) {
		data[FNR,j] = $j
	}
}
の部分は,入力された行に含まれる2つの数値を二次元の配列dataに格納している。 data[FNR,j] = $j for文に囲まれているので,jが1,2に対してそれぞれ,
	data[FNR,1] = $1
	data[FNR,2] = $2
となることがわかる。この例に示すように,入力された行の,空白で区切られたフィールドの値は$1$2 などのような変数に格納されるが,$変数名 のようにすれば,変数が持つ値によりそれに対応するフィールドの値を指すことになる。
 例えば,入力行が,
a1 b2 c3 d4 e5
で,x=4のとき,$xは4番目のフィールドを指すので,$xの内容は“d4”という文字列である。

 格納された値は後で,mean += data[i,2] variance += (data[i,2]-mean)^2 のようにして使われる。


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

E-mail to Shigenobu AOKI