sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容
进行各种排序操作的。实际上sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
Sort命令将逐行对文件中的内容进行排序。如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
[root@master ~]# sort --help
用法:sort [选项]... [文件]...
或:sort [选项]... --files0-from=F
将所有文件的排序连接写入标准输出。
# 长选项的强制参数也是短选项的强制参数。
排序选项:
-b, --ignore-leading-blanks 忽略前导的空白区域
-d, --dictionary-order 只考虑空白区域和字母字符
-f, --ignore-case 忽略字母大小写
-g, --general-numeric-sort compare according to general numerical value
-i, --ignore-nonprinting 只考虑可打印字符
-M, --month-sort compare (unknown) < 'JAN' < ... < 'DEC'
-h, --human-numeric-sort 使用易读性数字(例如: 2K 1G)
-n, --numeric-sort 根据字符串数值比较
-R, --random-sort 根据随机hash 排序
--random-source=文件 从指定文件中获得随机字节
-r, --reverse 逆序输出排序结果
--sort=WORD 按照WORD 指定的格式排序:
一般数字-g,高可读性-h,月份-M,数字-n,
随机-R,版本-V
-V, --version-sort 在文本内进行自然版本排序
其他选项:
--batch-size=NMERGE 一次最多合并NMERGE 个输入;如果输入更多
则使用临时文件
-c, --check, --check=diagnose-first 检查输入是否已排序,若已有序则不进行操作
-C, --check=quiet, --check=silent 类似-c,但不报告第一个无序行
--compress-program=程序 使用指定程序压缩临时文件;使用该程序
的-d 参数解压缩文件
--debug 为用于排序的行添加注释,并将有可能有问题的
用法输出到标准错误输出
--files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被
指定为"-"则从标准输入读文件名
-k, --key=KEYDEF sort via a key; KEYDEF gives location and type
-m, --merge merge already sorted files; do not sort
-o, --output=文件 将结果写入到文件而非标准输出
-s, --stable 禁用last-resort 比较以稳定比较算法
-S, --buffer-size=大小 指定主内存缓存大小
-t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换
-T, --temporary-directory=目录 使用指定目录而非$TMPDIR 或/tmp 作为
临时目录,可用多个选项指定多个目录
--parallel=N 将同时运行的排序数改变为N
-u, --unique 配合-c,严格校验排序;不配合-c,则只输出一次排序结果
-z, --zero-terminated 以0 字节而非新行作为行尾标志
--help 显示此帮助信息并退出
--version 显示版本信息并退出
KEYDEF为F[.C][OPTS][,F[.C][OPTS]]表示启动和停止位置,其中F是字段号,C是字段中的字符位置;
两者都是原点1,停止位置默认为行尾。如果-t和-b都不生效,则从前面空格的开始计数。
OPTS是一个或多个单字母排序选项[bdfgiMhnRrV],它覆盖该键的全局排序选项。如果没有给出键,则使用整行作为键。
SIZE may be followed by the following multiplicative suffixes:
内存使用率% 1%,b 1、K 1024 (默认),M、G、T、P、E、Z、Y 等依此类推。
如果不指定文件,或者文件为"-",则从标准输入读取数据。
*** 警告 ***
本地环境变量会影响排序结果。
如果希望以字节的自然值获得最传统的排序结果,请设置LC_ALL=C。
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。如果乱序,则输出第一个乱序的行的相关信息,最后返回1。
-C 检查文件是否已排好序,如果乱序不输出内容,仅返回1。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 使用『纯数字』进行排序(默认是以文字型态来排序的)。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-r 以相反的顺序来排序(默认升序)。
-o<输出文件> 将排序后的结果存入指定的文件。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 以哪个区间 (field) 来进行排序的意思。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。《起始域为0,即第一个起始栏位置为0(比较古老)》
--help 显示帮助。
--version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序。
把排序结果输出到原文件中 (用重定向可就不行了)
[root@localhost ~]# sort -r 1 -o 1
[root@localhost ~]# cat 1
5:a:E
4:b:D
3:c:C
2:d:B
1:e:A
[root@localhost ~]# sort -t : -k 2 1 (不能和-n一起使用)
5:a:E
4:b:D
3:c:C
2:d:B
1:e:A
3:f:F
合并文件会自动排序
[root@localhost ~]# sort 1 2 >3
从公司英文名称的第二个字母开始进行排序
[root@localhost ~]# sort -t ' ' -k 1.2 1.txt
baidu 11231 666
sohu 1235 304
goole 10000 200
guge 5234 123
释:
“-k 1.2”表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。
其中baidu因为第二个字母是a而名列榜首;sohu和google第二个字符都是o,但是sohu的h在google的o前面,所以sohu排在第二行,google排在第三行;guge就只能排在第四行了。
[root@localhost ~]# sort -t ' ' -k 1.2,1.2 -k 3,3nr 1.txt
baidu 11231 666
sohu 1235 304
goole 10000 200
guge 5234 123
释:
“-k 1.2,1.2”表示只对第二个字母进行排序。对于员工工资进行排序。
使用“-k 3,3”这是最准确的表述,表示只对本域进行排序,如果省略了后面的3,就变成对第3个域开始到最后一个域位置的内容进行排序。
Once we were also envied ~