

vmstat -a 5 で取得した、数日分のファイルがあります。  
メモリ使用率の平均を算出するために、Freeの使用量平均を知りたいのですが、awkで加算すると桁溢れしてしまい、上手くいきません。

シェルスクリプトの中で以下のように  
しています。

[code]

    VAR=`awk '{m+=$4} END{print m/NR;}' ${myfile}`
    
[/code]

良い方法がありましたら教えていただけないでしょうか。


CC BY-SA 3.0
2016-03-24T00:51:35.147
23401
2016-03-24T07:47:03.250
2016-03-24T03:59:29.767
3054
9807
question
shellscript awk
awkで大きい数の平均を出そうとすると桁溢れしてしまう


### 表記の問題

表示が指数表記(科学表記)になるのを避けるには、`printf`を使いフォーマットを指定する方法があります。

[code]

    printf "%d\n", m;
    
[/code]

`OFMT`であらかじめ`print`("f"が付かない方)が使うフォーマットを決めておく方法もあります。

[code]

    BEGIN{OFMT="%d"}
    
[/code]

### データが巨大な場合

今回の質問者さんのケースは違っていましたが、  
巨大なデータの平均などを出す場合、一つの浮動小数点数に集積していく計算方法だとどうしても精度の問題があります。計算方法を工夫しても、後半のデータが反映されない等の気付きづらい問題が発生しがちです。

この場合は他の方のコメントのように、任意精度演算（多倍長演算）が行なえる物を使うのが簡単です。  
一定期間毎に平均を出しておいて、後でそれらの平均を求める方法もありますね。


CC BY-SA 3.0
2016-03-24T03:51:53.993
23406
2016-03-24T07:47:03.250
2016-03-24T07:47:03.250
3054
3054
23401
answer

[code]

    awk '{ a+=($4-a)/NR } END{ print a }'
    
[/code]


CC BY-SA 3.0
2016-03-24T05:18:52.997
23408
2016-03-24T05:18:52.997
4010
23401
answer