在
Linux 文本处理场景中,
sort
命令是排序需求的首选工具。它不仅能按字典序排列文本行,还支持数值排序、多字段组合排序及自定义规则排序,是
数据清洗、
报表生成和日志分析的必备利器。本文将从基础语法到高级实战,全面解析
sort
命令的核心用法。
- 文本行排序:按指定规则对文件或标准输入的每行内容进行排序;
- 支持多种排序规则:字典序、数值大小、月份名称等;
- 输出处理:可去重、输出到指定文件或作为管道输入。
- 若未指定文件,默认从标准输入读取数据(如
echo "a\nb\nc" | sort
)。
参数 |
功能描述 |
-n |
数值排序(如10 排在2 后面,而非字典序的10 在2 前)。 |
-r |
逆序排序(降序排列)。 |
-f |
忽略大小写(如A 和a 视为相同)。 |
-t 分隔符 |
指定字段分隔符(如-t, 以逗号分隔)。 |
-k N |
按第 N 个字段排序(需配合-t 使用)。 |
-u |
排序后去重(仅保留重复行的首行)。 |
-o 输出文件 |
将结果输出到指定文件(覆盖原文件可写sort -o file file )。 |
-M |
按月份名称排序(如Jan →Dec )。 |
-b |
忽略行首空白字符(如制表符、空格)。 |
需求:对fruits.txt
按字母顺序排序。
apple
Banana
cherry
Date
sort fruits.txt
Banana
Date
apple
cherry
需求:对scores.txt
按分数从低到高排序。
100
20
5
sort scores.txt
sort -n scores.txt
需求:对员工信息按部门(第 2 列)和工资(第 3 列)排序。
Alice,HR,8000
Bob,IT,10000
Charlie,HR,9000
David,IT,9500
sort -t, -k2,2 -k3,3n employees.csv
Alice,HR,8000
Charlie,HR,9000
Bob,IT,10000
David,IT,9500
- 参数解析:
-k2,2
:仅按第 2 列排序(,
后无数字表示到行尾);
-k3,3n
:第 3 列按数值排序(n
指定数值模式)。
需求:统计access.log
中访问量前 10 的 IP。
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
1. awk '{print $1}':提取每行第1列(IP地址);
2. sort:对IP排序(为uniq做准备);
3. uniq -c:统计重复行次数;
4. sort -nr:按次数逆序(数值降序);
5. head -10:取前10条。
需求:对销售数据按月份排序。
May,1000
Jan,2000
Dec,1500
sort -M sales.csv
需求:对students.txt
按年龄(数值升序),年龄相同时按姓名字典序降序。
Alice 20
Bob 18
Charlie 20
sort -k2,2n -k1,1r students.txt
Bob 18
Charlie 20
Alice 20
问题现象 |
可能原因 |
解决方案 |
数值排序结果异常 |
字段含非数字字符 |
用grep 过滤无效行或预处理数据 |
中文排序混乱 |
字符编码未统一 |
执行export LC_ALL=C 临时设置环境 |
大文件排序内存溢出 |
默认使用内存排序 |
添加--batch-size=N 分块处理 |
分隔符不一致导致排序错乱 |
文件格式不规范 |
用sed /awk 预处理统一分隔符 |
- 大文件处理:使用
--buffer-size=50%
(分配 50% 内存)或--temporary-directory=/fastdisk
(指定高速临时目录);
- 并行排序:对无关子文件并行处理后合并(如
sort part1 | sort part2 | merge
)。
工具 |
优势场景 |
劣势 |
sort |
简单高效、原生支持 |
复杂规则需组合命令 |
awk |
灵活的自定义排序逻辑 |
大规模数据性能较低 |
Python |
复杂算法实现(如按日期排序) |
需要额外依赖 |
- 与
uniq
协作:先排序再去重(sort file | uniq
);
- 与
cut
协作:提取特定字段后排序(cut -d, -f3 file.csv | sort -n
);
- 与
grep
协作:过滤后排序(grep "ERROR" log.txt | sort -k4
)。
sort
命令凭借其简洁的语法和丰富的参数选项,成为 Linux 文本处理的核心工具之一。从基础的字典序排序到复杂的多字段数值组合排序,从文件处理到管道实时分析,sort
都能高效应对。掌握其核心参数(尤其是-k
、-n
、-r
)并灵活结合其他命令,可大幅提升数据处理效率。在处理大规模数据时,注意内存优化和并行策略,让排序操作更加高效稳定。