Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3020653
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-06-12 09:44:11

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



阅读(3696) | 评论(1) | 转发(2) |
0

上一篇:IP->ID范围统计

下一篇:PF_RING使用BPF过滤器

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

Linux92532012-06-12 13:13:32

[stock@localhost ~]$ last|awk '$3~"^([0-9]+.)+[0-9]+$"{a[++b[$3]]=$3}END{print a[length(a)]}'
222.66.234.246
[stock@localhost ~]$ last|awk '$3~"^([0-9]+.)+[0-9]+$"{a[++b[$3]]=$3}END{print a[length(b)]}'
222.66.234.246
[stock@localhost ~]$ last|awk '$3~"^([0-9]+.)+[0-9]+$"{a[++b[$3]]=$3}END{print a[asorti(b)]}'
222.66.234.246
[stock@localhost ~]$