Linux sort 命令 - 文本行排序工具
sort 命令是 Linux / Unix 系统中的用于对文本行进行排序的工具,可以对文本文件、标准输入的内容按照字典、数值、月份等多种规则进行排序,在排序的同时还可以进行去重、反向排序、按照指定的字段进行排序,是一款非常全面的排序工具。
[!NOTE]
sort命令的排序结果受系统当前使用的区域语言(locale)的影响,如果需要按照原生字节序进行排序,先执行export LC_ALL=C命令。
本文全面讲解 sort 命令的语法、选项、示例、使用技巧,覆盖基础到高级场景,让你彻底掌握 linux sort 命令用法。
sort 命令语法结构
sort 命令有两种标准语法的格式,具体的语法形式为:
sort [选项]... [文件]...
sort [选项]... --files0-from=F
语法结构中各部分的说明:
[选项]...:可选的内容,用于指定排序规则、输出格式,可以组合在一起使用;[文件]...:可选的内容需要的文件,可以同时指定多个文件,不指定文件或使用-从标准输入读取内容;--files0-from=F:从文件 F 中读取以空字符(NUL)分隔的文件名,当 F 指定为-时表示从标准输入读取文件名,注意 NUL 无法在文件编辑器中直接输入。
sort 命令使用示例
如下给出 sort 命令的使用示例,几乎涵盖了所有的使用场景。
默认字典序排序
不适用任何选项时,默认按照系统使用的字符集对文件内容中的行按字典顺序进行排序:
sort test.txt
[!NOTE]
如果系统中使用的是中文语言,按照字典排序无法达到你想要的效果,请执行
export LC_ALL=C sort test.txt命令
忽略前导空格排序
使用 -b / --ignore-leading-blanks 选项忽略文本行开头的空格、制表符,按照有效的文本内容进行排序:
sort -b test.txt
按照字母数字空格进行排序
使用 -d / --dictionary-order 选项按照字典顺序排序,其实只按照空格、字母、数字字符排序,会忽略其他的符号:
sort -d test.txt
通用数值排序
使用 -g / --general-numeric-sort 选项按照数值大小进行排序:
sort -g test.txt
[!NOTE]
数值支持科学计数法
忽略非打印字符排序
使用 -i / --ignore-nonprinting 选项忽略非打印字符,只对可打印字符进行排序:
sort -i test.txt
按照人类可读数值排序
使用 -h / --human-numeric-sort 选项,按照人类可读的数值单位进行排序:
sort -h test.txt
[!NOTE]
排序时支持 K/M/G/T 等人类可读的单位
随机排序
使用 -R / --random-sort 选项对内容进行随机排序,即打乱文件的内容:
sort -R test.txt
反向排序
使用 -r / --reverse 选项对对内容进行反向排序(按照降序排序):
sort -r test.txt
去重排序
使用 -u / --unique 选项在排序时去除重复的内容:
sort -u test.txt
输出结果到文件
使用 -o / --output=FILE 选项把排序后的内容输出到指定的文件:
sort test.txt -o sorted.txt
sort 命令选项说明
sort 命令可以使用选项指定不同的排序的方式,如下给出所有选项的详细解释说明:
| 选项 | 长选项 | 选项参数 | 功能说明 |
|---|---|---|---|
-b, --ignore-leading-blanks | 忽略掉文本行开头的的空格和制表符 | ||
-d, --dictionary-order | 按字典序排序,但是只按照空格、字母、数字进行排序 | ||
-f, --ignore-case | 忽略大小写,小写字母按照对应的大写进行排序 | ||
-g, --general-numeric-sort | 按通用数值排序,支持科学计数法 | ||
-i, --ignore-nonprinting | 忽略非打印字符,只对可打印字符进行排序 | ||
-M, --month-sort | 按照英文月份的缩写进行排序 从 1 月到 12月 | ||
-h, --human-numeric-sort | 按照数值进行排序,排序时支持 K/M/G/T 等人类可读单位的数值 | ||
-n, --numeric-sort | 按纯数字数值的大小排序 | ||
-R, --random-sort | 随机打乱文本行 | ||
--random-source=FILE | 从指定 FILE 文件获取随机字节,和 -R 选项在一起使用 | ||
-r, --reverse | 反向排序,按照降序排序,默认按照升序排序 | ||
--sort=WORD | 指定排序的类型,WORD 可取的值有:general-numeric -g / human-numeric -h / month -M / numeric -n / random -R/ version -V | ||
-V, --version-sort | 对文本中的版本号进行排序 | ||
--batch-size=NMERGE | 一次性最多合并 NMERGE 个输入文件,超出该值时会使用临时文件 | ||
-c, --check / --check=diagnose-first | 检查输入内容是否已进行排序,不对内容进行排序,会输出首个没有排序的行 | ||
-C, --check=quiet / --check=silent | 与 -c 选项的功能相同,,但不会输出未排序的行,只返回状态码 | ||
--compress-program=PROG | 使用指定 PROG 程序压缩临时文件,解压时使用 PROG -d 命令 | ||
--debug | 标注排序使用的行中的片段,并向标准错误输出警告信息 | ||
--files0-from=F | 从文件 F 读取以空字符(NUL)分隔的文件名,对文件名指定的文件惊进行排序 | ||
-k, --key=KEYDEF | 按指定 KEYDEF 键进行排序,KEYDEF 要指定位置和类型,KEYDEF 的格式为: F[.C][OPTS][,F[.C][OPTS]]:F=字段号;C=字段内字符的位置,从1开始;OPTS=排序选项(bdfgiMhnRrV),不指定时按照整行进行排序。 | ||
-m, --merge | 合并已排序的文件 | ||
-o, --output=FILE | FILE | 将排序结果保存到指定的 FILE 文件中 | |
-s, --stable | 禁用 last-resort 对比来进行稳定排序 | ||
-S, --buffer-size=SIZE | 指定排序使用的内存缓冲区的大小,支持使用 1% / b / K (默认单位) / M / G / T 等单位 | ||
-t, --field-separator=SEP | SEP | 使用 SEP 作为字段分隔符 | |
-T, --temporary-directory=DIR | DIR | 指定 DIR 作为临时文件目录,默认的临时文件目录为 /tmp | |
--parallel=N | 设置并发排序的线程数为 N | ||
-u, --unique | 排序时去除重复的行 | ||
-z, --zero-terminated | 使用空字符(NUL)作为行分隔符,默认行分隔符为换行符 | ||
--help | 显示帮助信息并退出 | ||
--version | 显示版本信息并退出 |
结语
sort 命令是 Linux / Unix 系统中功能非常全面的一款文本排序工具,它能够按照多种顺序进行排序,能满足不同的排序要求,是必须掌握的一款排序工具,在文本中介绍了 sort 命令的语法结构、使用示例和所有选项的详细解释说明,依据本文你一定能够掌握 sort 命令的使用方法。