我们这里一步一步来
1, sort ip_input
首先使用sort命令排序,这样相同的IP地址则可以排在一起,这步我是为了接下来使用命令uniq。因为uniq命令要求是使相邻的行唯一,如果相同行之间存在其它信息,命令不会使结果“唯一”!
输出结果为:
175.43.4.87
219.217.49.14
219.217.49.14
219.217.49.14
219.217.50.14
59.72.38.142
59.73.38.25
59.73.38.25
59.92.48.32
87.48.98.1
2, sort ip_input | uniq -c
这里解释一下uniq -c 选项。它的作用是将重复行去掉并且在每行的前面添加此行重复的次数,下一步则对此结果进行排序则可以找到登录次数最多的IP记录以及登录次数。
输出结果为:
1 175.43.4.87
3 219.217.49.14
1 219.217.50.14
1 59.72.38.142
2 59.73.38.25
1 59.92.48.32
1 87.48.98.1
(在第一个出现次数之前会有很多空格,这是怎么回事呢。。。)
3, sort ip_input | uniq -c | sort -r > tmp
sort命令的默认排序方式是升序,使用 -r 选项逆序排序结果,则出现次数最多的IP则排在了第一行,并将结果保存在tmp文件当中。
4, sed -n '1p' tmp && rm -f tmp
这里的sed -n 用于将文件tmp的第一行做析取操作,此时输出结果为:
3 219.217.49.14
IP 219.217.49.14 出现的次数最多,为 3 次。
PS:在结果中,第一个数字为此IP记录在文件当中出现的次数,这里我本不想将3输出,不过我没有太好的办法解决。当然办法也是有的,不过感觉很笨拙。希望各位多提一些好的解决方案!!!
-》cat ip_input | uniq -c | sort | tail -1 | awk -f '{print $2}'
-》