sort默认按字典序而非数值排序,数字排序需用-n;多列数据须配合-t指定分隔符、-k指定字段范围(如-k3,3n);去重用-u且须前置sort;大文件应调-buffer-size和-T避免内存/磁盘不足。

sort 默认按字典序排序,不是数值大小——这是绝大多数人第一次用就翻车的地方。
sort 按数字排序总出错?用 -n 还不够,得看字段和分隔符
常见错误现象:sort 把 10 排在 2 前面,或者对 CSV 文件某列排序时整行乱掉。
- 纯数字列表必须加
-n:比如sort -n numbers.txt - 但若要按第 3 列数字排序(如
name,age,score),得先用-t指定分隔符,再用-k定义字段:sort -t',' -k3,3n data.csv -
-k3,3n中的3,3表示“只取第 3 列”,避免-k3n从第 3 列开始吃到行尾导致误判 - 空格分隔时,
-k2,2n才能安全地按第 2 字段数值排;写成-k2n可能吞掉后续字段里的数字
去重、逆序、忽略大小写这些常用操作怎么组合
sort 的很多功能必须和其他选项连用才生效,单独加往往没效果。
- 去重要用
-u,但它依赖排序结果——所以sort -u是标准写法,sort | uniq多此一举 - 逆序统一加
-r,放在-n后面也行,顺序不影响:sort -rn或sort -nr都可以 - 忽略大小写用
-f,但注意它会让A和a被视为相同——如果同时用-u,可能意外删掉本该保留的行 - 中文排序默认按字节,想按拼音需设置 locale:
LC_COLLATE=zh_CN.UTF-8 sort file.txt
大文件排序慢、内存爆了怎么办
sort 默认把整个输入读进内存,几 GB 的日志或数据库导出文件很容易卡死或被系统 kill。
- 用
--buffer-size控制内存用量,例如sort --buffer-size=512M - 临时目录空间不足会报错
Cannot allocate memory或write failed: No space left on device,记得用-T指向大磁盘:sort -T /bigdisk/tmp - 极端情况可强制外排:
sort --sort=merge(但一般不需要,sort 本身已自动降级) - 如果只是找 Top N,别全排——用
sort -nr | head -n 10比先sort再head更省资源
真正麻烦的是混合了空格、制表符、逗号又没引号包裹的文本——-t 选错一个字符,-k 就全偏了。这种文件不如先用 awk 或 csvkit 清洗一遍再交给 sort。










