很多时候我们经常要从日志或文档对某些访问IP进行排序,以挑选出访问本机最多的IP加以限制,此时要结合使用sort和uniq可以很方便的达到目的。


1、sort:sort是将文件的每一行作为一个单位进行比较,默认是从左侧第一个字符开始,数字优先,然后是字母,并以升序显示结果:

常用的参数包括:

    -u:整个文档或日志重复的行只显示一次

    -n:按照数值从小到大的方式排列,a->z,1->9

    -r: 以降序排列,即数值从大到小,9->1,z->a

    -f: 忽略大小写

    -t: 指定分隔符,与cut命令相似

    -k: 指定分隔符进行比较的字段,与cut类似

    -b: 忽略每一行前面的空白字符,从第一个字符开始做比较

wKiom1RXB6bCxmWLAABIfzibV9Q930.jpg

总结:sort命令的去重功能可以去除整个文档中重复的行,并以升序排列,但是不能对每个同样的行出现了多少次进行统计,如果要进行相同的行统计,就要结合另外一个命令,uniq:

2、uniq:移除连续重复的行,并统计出现次数:

    -c: 连续重复的行只显示一次并统计每行总共出现的次数

    -d: 仅显示重复过的行

    -u;仅显示没有重复过的行当

wKioL1RXCk7Cl14JAACWqA2GOds889.jpg

总结:假如在对日志里的IP访问进行统计时候,要把sort和uniq结合使用,sort可以将日志进行排列,然后用uniq 对排列好的数值进行去重并统计出现的次数,最后再用一次sort -n,这是以最终统计后的出现次数的数值进行比较排列,可以得到最直观的结果,如下:

 3、统计a.txt文件里面每行出现的次数并按出现次数降序排列:

wKiom1RXE1bBq2OqAACGCjkS1yE196.jpg

对上个文件提取出出现最对的三行:

wKioL1RXFCrjnKC9AABkgcg21sA008.jpg