首页>教程>Linux 命令手册> 文件内容查看与处理 >Linux sort 命令 - 文本行排序工具

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=FILEFILE将排序结果保存到指定的 FILE 文件中
-s, --stable禁用 last-resort 对比来进行稳定排序
-S, --buffer-size=SIZE指定排序使用的内存缓冲区的大小,支持使用 1% / b / K (默认单位) / M / G / T 等单位
-t, --field-separator=SEPSEP使用 SEP 作为字段分隔符
-T, --temporary-directory=DIRDIR指定 DIR 作为临时文件目录,默认的临时文件目录为 /tmp
--parallel=N设置并发排序的线程数为 N
-u, --unique排序时去除重复的行
-z, --zero-terminated使用空字符(NUL)作为行分隔符,默认行分隔符为换行符
--help显示帮助信息并退出
--version显示版本信息并退出

结语

sort 命令是 Linux / Unix 系统中功能非常全面的一款文本排序工具,它能够按照多种顺序进行排序,能满足不同的排序要求,是必须掌握的一款排序工具,在文本中介绍了 sort 命令的语法结构、使用示例和所有选项的详细解释说明,依据本文你一定能够掌握 sort 命令的使用方法。