首页 > 代码库 > 关于sort的小结

关于sort的小结

近日有朋友问到sort常用的一些问题,虽然觉得很简单,但是还是简单的总结下:

1)-u:选项消除重复

[root@localhost ~]# cat seq.txt 
banana
apple
apple
pear
orange
orange
[root@localhost ~]# sort -u seq.txt 
apple
banana
orange
pear
如上:我们可以发现apple显示的只有一个了

2)-r:降序输出

[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选项:导出

[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前面了

[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选项,指定我们需要针对那一列来排序

[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的详细解析

[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按照员工工资降序进行排序,对于员工工资相同的公司,则按照公司人数升序排序:

[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

需求:按照月份进行排序(依照一月,二月,三月)

[root@localhost ~]# cat cal.txt 
January
February
June
May
[root@localhost ~]# sort -M cal.txt 
January
February
May
June

还有一些sort的功能,由于我没怎么用到,所以也就不额外介绍了


本文出自 “冰冻vs西瓜” 博客,请务必保留此出处http://molewan.blog.51cto.com/287340/1878320

关于sort的小结