要求打印 last 命令中,出现次数最多的IP地址:
- 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地址。
- 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地址。
阅读(1304) | 评论(0) | 转发(0) |