Apacheログに成功したクエリの割合を計算しようとしています。 2つのコマンドがあります。
cat access_log|cut -d' ' -f10|grep "2.."|wc -l
そして
cat access_log|cut -d' ' -f10|wc -l
クエリの成功数とクエリの総数を返します。可能であれば、bashを使用して成功した要求の割合を計算したいと思います。 1行のスクリプトでなければなりません。追加情報なしで-50や12などの%数だけが出力されるとします。
bcを使ってみましたが、知識不足で失敗しました。誰でも私を助けることができますか?
答え1
この試み:
echo $(( 100 * $( cut -d' ' -f10 access_log|grep "2.."|wc -l) / $(cut -d' ' -f10 access_log|wc -l) ))
Bashは整数のみを処理できます。
答え2
awk
ログファイルを一度だけ使用して繰り返します。
awk '{if ((199 < $9) && ($9 < 300)) {SUMOK++} else {OTHER++}} END { printf "%d\n", ((SUMOK/NR)*100)}' access_log
答え3
これを試してみてください。 $ 9をステータスコードの正しいフィールド番号に置き換えます。
awk '{if ($9 == 200) no_of_200+=1 } END{ perc=(no_of_200/NR)*100; print perc}' access.log
答え4
sed -ne'\|^\([^ ]* *\)\{9\}2..|=;$=;$s|.*|2ksmzlm/p|'|dc
...働く...
たとえば、
printf %s\\n 1 2 3 4 5 6 7 8 9 10 |
sed -ne'/1/=;$=;$s|.*|2ksmzlm/p|p'|dc
.20
...sed
入力ラインの20%に一致するパターンを表示します。1