質問: vmstat -a 5 で取得した、数日分のファイルがあります。 メモリ使用率の平均を算出するために、Freeの使用量平均を知りたいのですが、awkで加算すると桁溢れしてしまい、上手くいきません。 シェルスクリプトの中で以下のように しています。 ``` VAR=`awk '{m+=$4} END{print m/NR;}' ${myfile}` ``` 良い方法がありましたら教えていただけないでしょうか。
回答: ### 表記の問題 表示が指数表記(科学表記)になるのを避けるには、`printf`を使いフォーマットを指定する方法があります。 ``` printf "%d\n", m; ``` `OFMT`であらかじめ`print`("f"が付かない方)が使うフォーマットを決めておく方法もあります。 ``` BEGIN{OFMT="%d"} ``` ### データが巨大な場合 今回の質問者さんのケースは違っていましたが、 巨大なデータの平均などを出す場合、一つの浮動小数点数に集積していく計算方法だとどうしても精度の問題があります。計算方法を工夫しても、後半のデータが反映されない等の気付きづらい問題が発生しがちです。 この場合は他の方のコメントのように、任意精度演算(多倍長演算)が行なえる物を使うのが簡単です。 一定期間毎に平均を出しておいて、後でそれらの平均を求める方法もありますね。