前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SHELL命令分组统计

SHELL命令分组统计

作者头像
李鸿坤
发布2020-09-08 10:23:23
2.2K0
发布2020-09-08 10:23:23
举报
文章被收录于专栏:泛泛聊后端

从一个访问日志中,找出访问最多的IP所有访问的URL列表。

这是一个真实的面试题,目的在考察SEHLL基础的使用。对于这个日志所需要关注的信息只有IP和URL。

代码语言:javascript
复制
127.0.0.1  /user/add
127.0.0.3  /user/add
127.0.0.2  /user/add
127.0.0.2  /user/update
127.0.0.2  /user/delete

首先需要找出访问最多的IP,awk可以对文本进行分割

代码语言:javascript
复制
awk '{print $1}' access.log
127.0.0.1
127.0.0.3
127.0.0.2
127.0.0.2
127.0.0.2

排序和去重统计

代码语言:javascript
复制
awk '{print $1}' access.log |sort|uniq -c
      1 127.0.0.1
      3 127.0.0.2
      1 127.0.0.3

此时需要从中选出统计值最大的IP,把整个列表按降序排序,然后取其中第一个。

代码语言:javascript
复制
awk '{print $1}' access.log |sort|uniq -c |sort -nr
      3 127.0.0.2
      1 127.0.0.3
      1 127.0.0.1

取出后,再次用awk进行,分割。

代码语言:javascript
复制
awk '{print $1}' access.log |sort|uniq -c |sort -nr |head -1|awk '{print $2}'
127.0.0.2

如此访问最大的IP则出来了,再次使用grep则可以找出它所访问的列表。

【扩展】

简单的次数统计思路可以使用 sort 和 uniq来做,awk的功能其实更强大。

代码语言:javascript
复制
 awk '{ s[$1]++;} END { max=0;ip="";for(i in s) { if(max <= s[i]) ip=i ;} print ip}' access.log

首先进行分组统计,END后进行循环找出其中次数最多的IP。一个命令直接搞定。

这里是单个次数的相加,如果有需要进行日志中进行数值的分组统计,也是可以的。

代码语言:javascript
复制
127.0.0.1  10
127.0.0.3  20
127.0.0.2  1
127.0.0.2  2
127.0.0.2  2

对IP后的值进行统计相加则是

代码语言:javascript
复制
 $ awk '{ s[$1]+=$2;} END { for(i in s) { print i" "s[i] }}' sum.log
127.0.0.1 10
127.0.0.2 5
127.0.0.3 20

很多时候Excel透视图不熟悉,顺手就用SHELL搞定了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 泛泛聊后端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档