我正在尝试计算 apache 日志中成功查询的百分比是多少。我有两个命令:
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
...显示与 20% 的输入行sed
匹配的模式。1