Linux之统计ip排行

面试或者笔试中,经常会出现一道题,那就是,统计nginx日志中,访问量前N个的IP地址。

自问我对Linux还算是比较了解,知道过几个命令,但是组装起来用,确实是一门学问。

以下是我盲写的执行结果

执行结果,好像并不进入人意,不可能访问量最高的ip是9次。

上面的命令拆分起来,可以理解为:

打印第一列->去重,并且统计->倒叙排列->取前10条

看起来,好像没什么问题,但是问题出在了uniq上面了

uniq其实只用了去掉相邻的重复记录的,也就是,我们在使用uniq的时候,其实是应该先按照排序,然后再进行去重操作

改正后的命令如下

相比起前一个命令,第2个sort还增加了 -n,这是因为,我们使用uniq的时候,进行了计数,我们再根据计数(-n)进行倒叙排列(-r),最后前10条(head -10)记录.