Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541817
  • 博文数量: 375
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 10:21
文章分类

全部博文(375)

文章存档

2015年(1)

2014年(374)

分类: LINUX

2014-08-18 14:11:30

要求打印 last 命令中,出现次数最多的IP地址:




  1. last | awk --re-interval '/([0-9]{1,3}\.){3}/{i=++a[$3];if(max<i){ip=$3;max=i}}END{print ip}'
[解析]
首先过滤出包含IP地址的行,然后利用数组进行计数,利用 max 变量保存最大的数值,把最大数值的下标保存在变量 ip 中,最后打印出 ip 的值就是数量最多的IP地址。





  1. last | awk '$3~"^([0-9]+.)+[0-9]+$"{a[++b[$3]]=$3}END{print a[length(a)]}'
[解析]
这是更巧妙的办法,利用动态正则来匹配IP地址,然后以IP地址为下标记数,再把这个结果作为数组a的下标,那么必然数组a的下标为 1、2、3、4、5...一直累加,最后用length()函数取出数组的长度,也就是下标的个数,最大的那个下标的值既是出现的IP地址。



阅读(1268) | 评论(0) | 转发(0) |
0

上一篇:sed之M(GNU扩展)

下一篇:mkdir()创建多级目录

给主人留下些什么吧!~~