专栏首页泛泛聊后端SHELL命令分组统计

SHELL命令分组统计

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

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

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可以对文本进行分割

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

排序和去重统计

awk '{print $1}' access.log |sort|uniq -c
      1 127.0.0.1
      3 127.0.0.2
      1 127.0.0.3

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

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进行,分割。

awk '{print $1}' access.log |sort|uniq -c |sort -nr |head -1|awk '{print $2}'
127.0.0.2

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

【扩展】

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

 awk '{ s[$1]++;} END { max=0;ip="";for(i in s) { if(max <= s[i]) ip=i ;} print ip}' access.log

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

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

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后的值进行统计相加则是

 $ 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搞定了。

本文分享自微信公众号 - 泛泛聊后端(HelloBackend),作者:李鸿坤

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Log4j2日志框架

    log4j2是一个比较新的日志框架,作为log4j的升级版本,修复了它的锁竞争问题提升了性能,提供了丰富的组件支持以及良好的语义配置。

    李鸿坤
  • Java日志门面系统

    一个线上程序的运行情况监测,日志扮演着极其重要的角色。Java发展了20年,日志系统也是百家争鸣,不同历史时期出现的开源组件往往有着不同的日志实现,应用的整合难...

    李鸿坤
  • MVC模式在服务端的过去、现状和未来

    Model-View-Controller模式最开始出现于Client-Server流行的时代,它很好地解决了视图展示代码和模型及其业务逻辑代码的耦合。

    李鸿坤
  • Android动画绘制原理(源码解析)

    Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第...

    静默加载
  • 剑指Offer面试题:15.反转链表

      由于题目并没有要求必须原地反转,因此可以借助外部空间实现。这里可以将单链表储存为数组,然后按照数组的索引逆序进行反转。但是,此方式比较浪费空间,而且需要两次...

    Edison Zhou
  • Ubuntu Xfce桌面系统设置项

    系统安装的Ubuntu 16.04 ,默认的桌面的系统不是很习惯,特意安装了xfce4桌面系统。

    程序手艺人
  • 在COVID-19中平衡个人隐私和公共安全:韩国和法国的案例(CS CY)

    对于不同国家如何应对《京都议定书》,一直存在激烈的争论。为保障公共安全,韩国以个人隐私为代价积极使用个人信息,而法国则以公共安全为代价鼓励自愿合作。在这篇文章中...

    奥斯特洛夫斯萌
  • 年度宽客 (2000 - 2019)

    前几天看到了 Quant of the Year 2019 颁布的新闻,回想从 2015 年开始自学机器学习时就没关注这个了,因为这个奖项通常都是 Q-quan...

    用户5753894
  • __cxa_call_unexpected原因

    #1  0xf73c4657 in raise () from /lib/libc.so.6

    一见
  • Android Handler机制2之ThreadLocal

    我们看到首先是拿到当前先线程实例t,任何将t作为参数构造ThreadLocalMap对象,为什么需要通过Threadl来获取ThreadLocalMap对象?T...

    隔壁老李头

扫码关注云+社区

领取腾讯云代金券