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の書式を下記の形式で書くことができます。 %[.精・・・
コメント