Linux命令-sort和uniq
sort
sort,见名知意,就是用来排序的,默认使用当前字符集排序规则。sort命令会读取每一行输入,以每一行作为一个单位相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
示例演示:
1 | [root@test ~]$ cat testfile |
从这个例子看,似乎一行行比较的时候遇到空格或者制表符会将这种空白符过滤掉?
参数选项
-t:用于指定分隔符。-k:指定用来排序的列数。-n:以数值来排序。-t和-k可以联合起来使用,例如如下的文本company.txt:
1 | google|110|5000 |
第一个域是公司名称,第二个域是员工人数,第三个域是员工平均工资。
如果要按照员工人数排序,可以这样操作:
1 | [root@test ~]$ sort -n -t '|' -k 2 company.txt |
注意,这里的-n是不能省略的,如果没有-n参数,将会按照数字的ASCII码来排序,结果如下:
1 | [root@test ~]$ sort -t '|' -k 2 company.txt |
-r:以降序排序,因为sort命令默认是升序排序的。-b:忽略每一行前面的空白字符。-f:将所有的小写当成大写字母。
uniq
uniq的作用是去除相邻位置的重复行。
1 | [root@server01 tmp]# cat file |
可以看到前面2行相邻的 bbbbbbbb 去重后变成了一行,同理,后面3行相邻的 bbbbbbbb 也变成了一行。
uniq和sort联合使用,先sort将文件按行排序,所有相同的行就会出现在相连的地方,然后再使用uniq,可以去掉文件中所有重复的行。
1 | [root@server01 tmp]# sort file | uniq |
常用的选项-c选项,显示输出中,在每行行首加上本行在文件中出现的次数。
1 | [root@server01 tmp]# sort file |uniq -c |
-d选项,只显示重复行。
1 | [root@server01 tmp]# sort file |uniq -d |
-u选项,只显示文件中不重复的各行。
1 | [root@server01 tmp]# sort file |uniq -u |
从上边的例子也可以看出,uniq一般会和sort搭配使用,两者搭配,可以实现很多功能。
------ 本文完 ------