sort
命令对文件逐行进行排序,或者把多个排过序的文件归并成一个有序的文件。sort
支持各种快排、堆排等多种排序算法;支持对把文件行切分成多个字段按指定KEY进行比较;支持各种比较方式(字典、数字、浮点、月份、版本……),支持利用多个CPU并行排序,支持对大文件采用mmap加速;支持临时文件和目录……功能非常强大。
我日常用到的参数如下:
-t char
,--field-separator=char
-k field1[,field2]
,--key=field1[,field2]
- sort默认按照文件的每一行进行比较(整行作为比较的key),但是也可以通过
-t
参数将一行文字分隔为多个字段,然后用-k
参数指定将哪个字段作为比较大小的key。
- sort默认按照文件的每一行进行比较(整行作为比较的key),但是也可以通过
--debug
- 输出调试信息,这是学习sort命令的最佳工具,打印每一步比较的key是什么,比较结果是什么。
-u
,--unique
- 过滤掉重复的行(采用稳定排序算法)。如果和
-c
或者-C
选项一起使用,检查有序的同时也检查是否有重复的行(更准确来说是key)。
- 过滤掉重复的行(采用稳定排序算法)。如果和
-m
,--merge
- 合并多个文件:要合并的文件应该保持有序。
-s
-
稳定排序,KEY相同的时候保持原有的排列顺序。
file.txt => 内容如下 0 99 2 12 1 12 9 11 sort -k 2 -u -s file.txt =>输出如下 9 11 2 12 0 99
上面的排序命令:默认按照空格将每一行分为前后两个字段,以第二个字段作为排序的KEY。排序采用稳定算法,忽略掉KEY相同的行。
-
-c
,--check
-C
,--check=silent|quiet
- 检查文件是否有序。如果文件是无序的,显示错误并返回错误码:-1,文件有序则返回:0。
-C
,--check=silent
或--check=quiet
是“安静”模式,只返回值,无输出信息.
-b
,--ignore-leading-blanks
- 忽略行首空白。
-f
,--ignore-case
- 先转换为大写,然后比较,从而起到忽略大小写的作用。
-h
,--human-numeric-sort
,--sort=human-numeric
- 用于存储容量的比较,如果内存和硬盘的大小往往用
K
,M
,G
,T
等单位:1M > 9K
。算法先比较正负,然后比较单位的字母,最后才比较数字。
- 用于存储容量的比较,如果内存和硬盘的大小往往用
-M
,--month-sort
,--sort=month
- 按照月份的缩写进行比较。
-R
,--random-sort
,--sort=random
- 按KEY生成HASH值,然后按照HASH值进行排序,因此不同的KEY按照随机顺序排列。注意:KEY相同的会排在一起。
-r
,--reverse
- 倒序排列。
-V
,--version-sort
- 按版本号的规则进行比较:每一行看做:前缀+版本号+后缀。相关的正则式为:
"(.([A-Za-z~][A-Za-z0-9~]*)?)*"
- 按版本号的规则进行比较:每一行看做:前缀+版本号+后缀。相关的正则式为: