前のスクリプトでは,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 }