データファイルの第 n 列の平均と分散を取りたい
練習として、データファイルの平均と分散をとる
awk script ファイルを示しましょう。
他の操作(相関関数を計算する)なども、
この例の応用でできます。
表題には第 n 列と書いていますが、
ここでは具体的に第 1 列の平均と分散を計算するスクリプトを示します。
なお、変数 ave と dev の初期化は必要ありませんが、
BEGIN の使い方を示すために書いているなど、
いろいろな例を示すために少々無駄な書き方をしています。
また、AWK では # より後ろはコメントになります。
----------------------------------
BEGIN{ # データファイルを読み込む前の処理
ave=0 # 初期化は必要ありません
dev=0 # 初期化は必要ありません
}
$0!~/#/{ # データファイルを一行ずつ処理する
n++
data[n] = $1 # 第1列のデータを取り込む
}
END{ # データファイルを読み込んだ後の処理
# 平均の計算
for(m=1; m<=n; m++) # ここにくると n は総行数を表している
ave = ave + data[m]
ave = ave / n
# 分散の計算
for(m=1; m<=n; m++)
dev = dev + (data[m]-ave)*(data[m]-ave)
dev = dev / (n-1)
# 結果の出力
printf("average=%f deviation=%f\n",ave,dev)
}
----------------------------------