sort命令的使用
本节主要介绍一下sort命令的使用。
# cat /etc/centos-release CentOS Linux release 7.3.1611 (Core) # uname -a Linux sz-oss-01.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
1. sort命令
sort命令用于对文本文件中的行
进行排序。其基本语法如下:
sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F
1.1 相关选项
sort命令会将排序后的结果输出到标准输出
。下面我们介绍一下常用选项:
2. sort使用示例
1) sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出:
# cat sort.txt aaa:10:1.1 ccc:30:3.3 ddd:40:4.4 bbb:20:2.2 eee:50:5.5 eee:50:5.5 # sort sort.txt aaa:10:1.1 bbb:20:2.2 ccc:30:3.3 ddd:40:4.4 eee:50:5.5 eee:50:5.5
2) 忽略相同行,使用-u
选项或者uniq
cat sort.txt aaa:10:1.1 ccc:30:3.3 ddd:40:4.4 bbb:20:2.2 eee:50:5.5 eee:50:5.5 aaa:10:1.1 # sort -u sort.txt aaa:10:1.1 bbb:20:2.2 ccc:30:3.3 ddd:40:4.4 eee:50:5.5
3) sort的-n
、-r
、-k
、-t
选项的使用
3) -k
选项的具体语法格式
-k
选项的语法格式如下:
FStart.CStart Modifier,FEnd.CEnd Modifier -------Start--------,-------End-------- FStart.CStart 选项, FEnd.CEnd 选项
这个语法格式可以被其中的逗号
分为两大部分,Start部分和End部分。 Start部分也是由三部分组成, 其中的Modifier
部分就是我们之前说过的类似n
和r
的选项部分。我们重点说说Start部分的FStart
和CStart
。
CStart
也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart
,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算排序首字符
。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd
,则表示到域尾
,即本域的最后一个字符,或者如果你将CEnd
设定为0(零),也是表示结尾到域尾
。
参看如下示例:
- 从公司英文名称的第二个字母开始进行排序:
# cat facebook.txt google 110 5000 guge 50 3000 baidu 100 500 sohu 100 4500 # sort -t ' ' -k 1.2 facebook.txt baidu 100 500 sohu 100 4500 google 110 5000 guge 50 3000
上面使用了-k 1.2
,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu
因为第二个字母是a
而名列榜首。sohu
和google
第二个字符都是o
,但是sohu
的h在google
的o前面,所以两者分别排在第二和第三。guge
只能屈居第四了。
- 只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序
# sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt google 110 5000 sohu 100 4500 guge 50 3000 baidu 100 500 # sort -t ' ' -k 1.2r,1.2r -nk 3r,3r facebook.txt guge 50 3000 google 110 5000 sohu 100 4500 baidu 100 500
由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2
的表示方式,表示我们只对第二个字母进行排序。(如果你问我使用-k 1.2
怎么不行? 当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排序,我们也使用了-k 3,3
,这是最准确的表述,表示我们只对本域进行排序,因为如果你省略了后面的3,就变成了我们对第3个域开始到最后一个域位置的内容进行排序了。
[参看]