使用 sort 的 -k 参数可以指定要排序的列,这里是第 1 列;再结合上面的排序,就能把耗时最高的日志打印出来了:
awk -F '|' '{print $6 $1 $4}' access.log | awk -F 'time=' '{print $2}' | sort -k1nr | head -3
结果:
11.822 date=2017-09-23 13:32:50 url=/api/foo/bar?params=nothing 9.962 date=2017-09-23 13:32:50 url=/api/foo/bar?params=everything 9.703 date=2017-09-23 13:32:50 url=/api/foo/bar?params=something
统计请求次数最多的接口
如果需要统计哪些接口每天请求量是最多的,只需要新引入 uniq 命令。
我们已经可以通过 grep -v HEAD access.log | awk -F '|' '{print $4}' 来筛选出所有的 url,uniq 命令可以删除 相邻 的相同的行,而 -c 可以输出每行出现的次数。
所以我们先把 url 排序以让相同的 url 放在一起,然后使用 uniq -c 来统计出现的次数:
grep -v HEAD access.log | awk -F '|' '{print $4}' | sort | uniq -c
因为示例日志数量太少,我们假设日志里有多条,那么结果应该类似下面:
1 url=/api/foo/bar?params=anything 19 url=/api/foo/bar?params=everything 4 url=/api/foo/bar?params=nothing 5 url=/api/foo/bar?params=something
接下来再 sort 即可:
grep -v HEAD access.log | awk -F '|' '{print $4}' | sort | uniq -c | sort -k1nr | head -10
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。










