近日有朋友问到sort常用的一些问题,虽然觉得很简单,但是还是简单的总结下:
1)-u:选项消除重复
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost ~] # cat seq.txt
banana apple apple pear orange orange [root@localhost ~] # sort -u seq.txt
apple banana orange pear 如上:我们可以发现apple显示的只有一个了 |
2)-r:降序输出
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost ~] # cat number.txt
1 2 3 4 5 [root@localhost ~] # sort -r number.txt
5 4 3 2 1 如上:添加-r选项后,number.txt里面显示的内容的确是从高到低进行排序了 |
3)-o选项:导出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
[root@localhost ~] # sort number.txt
1 2 3 4 5 [root@localhost ~] # sort number.txt >number.txt
[root@localhost ~] # cat number.txt
[root@localhost ~] # echo $?
0 说明:发现输出的number.txt文件为空 [root@localhost ~] # cat number.txt
[root@localhost ~] # cat<<EOF>number.txt
> 1 > 2 > 3 > 4 > 5 > EOF [root@localhost ~] # cat number.txt
1 2 3 4 5 [root@localhost ~] # sort -r number.txt -o number.bak
[root@localhost ~] # cat number.bak
5 4 3 2 1 如上:使用-o选项后,可以很方便的进行保存 |
4)-n选项
说明:关于sort数字排序的困惑
a、“sort有时候会被我们认为抽风,比如说数字11居然比8小?”
b、出现这个现象并非偶然,可能是由于sort命令默认是按照字符来进行排序的,它会认为字符8在ASCII字符里是排在字符1后面,所以就将11排在8前面了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@localhost ~] # sort number.sort -u
1 10 11 19 2 21 3 4 43 44 5 8 使用-n选项, sort 在输出的时候就会按照数值来排序了
[root@localhost ~] # sort -nu number.sort
1 2 3 4 5 8 10 11 19 21 43 44 |
5)tk选项
说明: -t选项,表明指定间隔符
-k选项,指定我们需要针对那一列来排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@localhost ~] # cat fruit.txt
# 文件内容说明: # 第一列表示水果类型 # 第二列表示水果数量 # 第三列表示水果价格 banana:30:5.5 apple:10:2.5 pear:90:2.3 orange:20:3.4 [root@localhost ~] # sort -n -k 2 -t : fruit.txt
# 第二列表示水果数量 # 第三列表示水果价格 # 第一列表示水果类型 # 文件内容说明: apple:10:2.5 orange:20:3.4 banana:30:5.5 pear:90:2.3 [root@localhost ~] # sort -n -k 3 -t : fruit.txt
# 第二列表示水果数量 # 第三列表示水果价格 # 第一列表示水果类型 # 文件内容说明: pear:90:2.3 apple:10:2.5 orange:20:3.4 banana:30:5.5 |
6)关于-k的详细解析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@localhost ~] # sort -t ` ` -k 1 facebook.txt
sort : multi-character tab '-k'
说明:有一些 sort 可能不能直接使用-t "\t" 让tab作为分隔符,这个时候你可以转义tab,例如使用-t $ '\t' 这样就可以让tab成为分隔符了。
[root@localhost ~] # sort -t $'\t' -k 1 facebook.txt
baidu 100 5000 google 110 5000 sina 50 3000 sohu 100 4500 上面的输出信息可能是由于输入法的符号问题导致: [root@localhost ~] # sort -t ' ' -k 1 facebook.txt
baidu 100 5000 google 110 5000 sina 50 3000 sohu 100 4500 -k 2 -k 3(说明设定排序的优先级,先以第2列进行排序,如果相同,再以第3列进行排序) [root@localhost ~] # sort -n -t ' ' -k 2 -k 3 facebook.txt
sina 50 3000 sohu 100 4500 baidu 100 5000 google 110 5000 |
需求:让facebook.txt按照员工工资降序进行排序,对于员工工资相同的公司,则按照公司人数升序排序:
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~] # cat facebook.txt
google 110 5000 baidu 100 5000 sina 50 3000 sohu 100 4500 [root@localhost ~] # sort -n -t ' ' -k 3r -k 2 facebook.txt
baidu 100 5000 google 110 5000 sohu 100 4500 sina 50 3000 |
需求:按照月份进行排序(依照一月,二月,三月)
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~] # cat cal.txt
January February June May [root@localhost ~] # sort -M cal.txt
January February May June |
还有一些sort的功能,由于我没怎么用到,所以也就不额外介绍了
本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1878320,如需转载请自行联系原作者