Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198002
  • 博文数量: 34
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-10 21:00
个人简介

http://blog.chinaunix.net/uid/26870656.html 我是一个很懒的人

文章分类

全部博文(34)

文章存档

2014年(18)

2013年(9)

2012年(7)

分类: LINUX

2014-04-26 14:26:35

要求打印 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地址。



阅读(1444) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

金龙崔2014-04-26 14:28:31

awk 正则表达式--re-interval参数
为在awk正则表达式中使用{m,n}
需要添加启动参数awk --re-interval