【awkコマンド】条件付きデータから平均を出す方法

IT

awkを使って条件付き平均値を取得する方法がなかなかうまくいかず、躓いたので覚書。

※以下前提

・レスポンスタイムはミリ秒
・レスポンスタイムは最後尾に出力

 

🍠1~2月のアクセスログからレスポンスタイムの平均値を取得する

zcat access_log.20210[1-2]*.gz | awk '{total += $NF} END {print total/NR}'

 

🍠1~2月のアクセスログから1秒以上かかっているものの平均値を取得する

zcat access_log.20210[1-2]*.gz | awk '$NF > 1000000 {total += $NF; count++}; END{print total/count}'

この場合「1.70935e+06」のように指数表現になってしまうという問題が。

どうやら組込変数「OFMT」のデフォルトが「%.6g(小数点以下第6位以上は指数表現)」となっているのが原因。これを通常の小数点表示に直すと、

 

🍠1~2月のアクセスログから1秒以上かかっているものの平均値を取得(浮動小数点表記ver)

zcat access_log.20210[1-2]*.gz | awk '{OFMT="%.2f"} $NF > 1000000 {total += $NF; count++}; END{print total/count}'

こうなる。

ちなみに「%.2f」は少数第2位までを浮動小数点数として出力という定義

 

他の定義一覧は以下サイトがとても参考になりました。

awkでよく使うprintfの書式のサンプルコード | ITを使っていこう
awkコマンドで書く場合によく使っている、printfの書式をサンプルコードと合わせてご紹介します。 awkのprintfの書式 awkのprintfの書式を下記の形式で書くことができます。 %[.精・・・

コメント

タイトルとURLをコピーしました