关于sort的小结

近日有朋友问到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,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值