入力した全てのデータを処理するためには,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になるはずなのに。何か忘れていることがある。