Sort如何进行排序,如何根据出现次数取IP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sort如何进行排序,如何根据出现次数取IP相关的知识,希望对你有一定的参考价值。

常用组合:sort+uniq+head+awk


作用分析

  • AWK对于取列非常的合适,支持正则

  • uniq对于AWK刚取出的列值进行计算出现次数并去重

  • sort对于uniq出的出现次数进行升降排序,这样就按照出现次数频率高低进行排序了

  • head可以取前n行进行显示



处理示例:去除下列IP中出现频率最高的3个IP

[[email protected] ~]# cat 123
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.5
192.168.1.5
192.168.1.10
192.168.1.20
192.168.1.30
192.168.1.40
192.168.1.50
192.168.1.60
192.168.1.70
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.1
192.168.1.2

第一次处理:

[[email protected] ~]# sort  123     ##第一次处理后,相同的数值出现在了一起
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.10
192.168.1.2
192.168.1.2
192.168.1.20
192.168.1.3
192.168.1.3
192.168.1.30
192.168.1.4
192.168.1.4
192.168.1.40
192.168.1.5
192.168.1.5
192.168.1.5
192.168.1.50
192.168.1.60
192.168.1.70

第二次处理:

[[email protected] ~]# sort  123|uniq -c		##第二次处理出现了出现次数的记录
3 192.168.1.1
1 192.168.1.10
2 192.168.1.2
1 192.168.1.20
2 192.168.1.3
1 192.168.1.30
2 192.168.1.4
1 192.168.1.40
3 192.168.1.5
1 192.168.1.50
1 192.168.1.60
1 192.168.1.70

第三次处理:

[[email protected] ~]# sort  123|uniq -c|sort -r		##第三次处理,对出现次数降序排序
3 192.168.1.5
3 192.168.1.1
2 192.168.1.4
2 192.168.1.3
2 192.168.1.2
1 192.168.1.70
1 192.168.1.60
1 192.168.1.50
1 192.168.1.40
1 192.168.1.30
1 192.168.1.20
1 192.168.1.10

第四次处理:

[[email protected] ~]# sort  123|uniq -c|sort -r|head -n 3		##取出前三个
3 192.168.1.5
3 192.168.1.1
2 192.168.1.4


真正排序难点在于AWK的取值,如何把IP全部规范的取出

关于Sort的选项可以参考 http://www.cnblogs.com/ningvsban/p/3724306.html


以上是关于Sort如何进行排序,如何根据出现次数取IP的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0451. 根据字符出现频率排序

数组中出现次数超过一半的数字(C++剑指Offer详解)

如何用sort对结构体进行排序

计数排序(Count Sort )与插入排序(Insert Sort)

如何爬取可用的IP代理

如何使用 std::sort() 对指向值的向量进行排序?