sort
sort基本功能
将文本文件内容加以排序,sort可以针对文本文件的内容,以行为单位来进行排序。但是如果不加命令选项的时候文件的内容并不会被排序之后的文件覆盖。
命令选项
sort -n [文件名]
以整形类型(C语言中的int)比较字段。
否则可能会遇到9 > 10的现象:
~sort num
0
1
11
13
2
2
32
44
5
6
sort num -n
0
1
2
2
5
6
11
13
32
44
以上就是-n与什么都不写的差距。
sort [文件名1] [文件名2] -o [文件名3]
将已经排序好了的文件1写入到文件2中,但是该选项下并不会再将排序内容进行输出,此时可以cat [文件名2]来显示排序了的内容。如果该文件为sort文件之一,则sort会在未排序写到输入文件之前,会先将它复制到一个临时的文件。
sort -r [文件名]
将文件原本的sort的顺序逆置。
sort -t 字符
使用单个字符作为默认的字段分割字符,默认的是取空白字符。
sort -u [文件名]
保证sort最后的结果只有唯一的记录,也就是丢弃所有的具有相同键值的记录,只保留其中的一条。只有键值字段是重要的,也就是说,被丢弃的记录的其他的部分可能是有区别的,但由于其键值相同,仍然被认为是没有区别的。
sort -b [文件名]
会忽略开头的空白。
sort -c [文件名]
检查是否已经排序,若已经排序没有任何输出,有排序会返回非零值。
sort -f [文件名]
排序的时候无论字母的大小写。
sort -k [文件名]
可以定义排序的键值字段(该选项之后接一个字段编号)。
首先文件tex中有一些数据
~cat tex
google 100 5000
baidu 110 5000
guge 50 3000
souhu 100 4500
~sort tex
baidu 110 5000
google 100 5000
guge 50 3000
souhu 100 4500
~sort -k 1 tex
baidu 110 5000
google 100 5000
guge 50 3000
souhu 100 4500
~sort -k 2 -n tex
guge 50 3000
google 100 5000
souhu 100 4500
baidu 110 5000
例子
首选文件data中有一些数据如下:
~cat data
2017-12-02
2014-06-29
2015-03-21
2018-11-12
要求1:按照日期年份排序。
~sort -n data
2014-06-29
2015-03-21
2017-12-02
2018-11-12
要求2:按照日期月份排序。
~sort -n -k 2 -t '-' data
2015-03-21
2014-06-29
2018-11-12
2017-12-02
当sort -k num1,num2的操作时,会是什么样子呢?
~sort -n -k 1.2,2.0 -t'-' data
2014-06-29
2015-03-21
2017-12-02
2018-11-12
以上的命令的含义就是从第一个字段的地2个字符开始比较到第二个字段的第0个字符为止。
~sort -t'-' -k1n -k2n daa 以短线隔开的为字段,先比较第一个字段,然后再在第一个字段排序好了的基础下排序第二个字段。
1212-222
1212-232
1212-522
1521-232