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