首页/系统/Linux 运维命令速查/sort 进阶:大小 / 版本 / 随机
文本处理77 条

sort 进阶:大小 / 版本 / 随机

-h 按人类可读大小排序、-V 按版本号、-R 随机打乱、-t/-k 指定字段,du/df 输出排行榜全靠它。

Linux 运维命令速查系统更新于 2026-10-13

专用比较模式

sort 除了字典序与字段排序,还提供几类专用比较模式:-h 按人类可读大小(1K、2M、3G)排序、-V 按版本号分段排序、-R 随机打乱、-u 去重、-s 稳定排序。这些模式能省掉很多原本要写脚本的场景:du 输出按大小排行用 -rh,包版本列表用 -V,抽检用 -R。另一个容易被忽视的点是默认按当前 locale 排序,结果依赖环境且更慢,处理 ID 与 URL 这类机器数据建议固定 LC_ALL=C。

基本信息

适用平台Linux/macOS(GNU coreutils;BSD sort 支持其中大部分选项)
命令语法sort [选项] 文件
常用选项-n 数字 -h 人类可读 -V 版本号 -R 随机 -r 逆序 -u 去重 -k 键 -t 分隔符 -s 稳定 -o 输出文件
环境影响LC_ALL=C 会改变排序规则并提升速度,机器数据处理推荐固定它
大文件处理用 -S 调整内存缓冲,必要时用 --parallel 并行排序

典型使用场景

  • 目录大小排行:du 输出配合 -rh 得到直观榜单
  • 磁盘用量排行:df 输出按使用率排序
  • 版本排序:把 1.10 正确排在 1.9 之后
  • 随机抽检:用 -R 打乱后取前几条做人工核验
  • 去重统计:先 -u 去重再计数

常用示例

常用示例
du -sh * | sort -rh | head             # 按大小排行
df -h | sort -k5 -rh                    # 按使用率排序
rpm -qa | sort -V | tail                # 版本号排序
sort -R list.txt | head                 # 随机取几条
sort -u domains.txt | head              # 去重
LC_ALL=C sort urls.txt | uniq -c | sort -rn | head
sort -t: -k3,3n -S 1G /etc/passwd       # 加大排序缓冲

专用比较模式

选项比较规则典型场景
-h识别 K、M、G 等后缀并按数量级比较du 与 df 输出排行
-V按版本号分段比较软件版本列表排序
-n纯数值比较计数与数值列
-R随机排序(不是密码学安全随机)抽检与洗牌
-u输出去重后的唯一值生成唯一值列表
-n 只认纯数字。带 K、M 后缀的大小要用 -h,混用会出现 100K 排在 9 前面这类明显错误的结果。
大文件排序会使用临时目录,占用空间可能与输入规模相当。处理超大文件前先确认临时目录容量,并用 -S 与 --parallel 调整资源使用。
默认情况下 sort 在比较出相等键后还会做整行比较作为兜底,因此结果确定但不保留输入顺序。加 -s 可以关闭兜底比较,让相等键维持原有相对顺序。
--parallel 控制并行排序的线程数,-S 控制内存缓冲大小。两者配合可以减少临时文件读写,但当机器本身 IO 或 CPU 紧张时要谨慎调大。

易错点

  • 用 -n 排序带单位的大小,得到错误顺序,应改用 -h
  • 忘记 -r 导致想看的排行从小到大排列
  • 大文件排序占用大量临时空间,未评估 /tmp 容量导致写满
  • 跨环境结果不一致,因为排序依赖 locale,脚本未固定 LC_ALL=C

数据来源与参考

  • man 1 sort(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌