在linux 文本处理里,sort是排序列、去重、统计、日志分析的神器。默认按整行字典序排序,配合参数可实现数值、多字段、自定义分隔符、去重、反向等需求。
今天整理13个生产级实战示例,全覆盖日常工作场景,看完直接复制即用,文本、磁盘、日志排序全部一键搞定。
一、核心参数速查
-n:按数值排序(避免 10 字符序坑)-r:反向 / 降序-u:排序并去重-t:指定字段分隔符(如逗号、冒号)-k:按指定字段排序(-k start [,end])-b:忽略行首空白-f:忽略大小写-o:输出到文件(安全覆盖原文件)-c:检查是否已排序-g:通用数值排序(支持科学计数法)
sort是按ascii码排序,数字 < 大写字母 < 小写字母,总结起来就是s 数字不按大小、大写在小写前,所有看起来比较变扭,这时候就要用到-n参数了。-n:代表按照数值大小进行排序,只排序数字,从小到大,只认数字开头的值。sort -k2nr -k4nr ceshi1.txt
#逗号分隔txt按第4列薪资降序sort -t ',' -k4nr ceshi2.txt#/etc/passwd按UID(第3列)升序sort -t ':' -k3n /etc/passwd
#仅按第2列(年龄)字典序sort -k2,2 ceshi1.txt
-k3 = 从第 3 列开始,到行尾都参与排序;-k3,3= 只取第 3 列排序。
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
提取 IP(awk)→排序(sort)→统计次数(uniq -c)→按次数降序(sort -nr)→取前 10(head -10)。awk '{print $7}' access.log | grep -v '^-$' | sort | uniq -c | sort -nr | head -20
awk '{print $7}' access.log:从日志中提取第 7 列(请求路径);grep -v '^-$':过滤掉无效的 -空路径;sort:对路径进行排序,为 uniq 做准备;uniq -c:统计每个路径的访问次数;sort -nr:按访问次数从高到低排序;head -20:只显示访问量最高的前 20 个路径。
sort -t '.' -k1n -k2n -k3n -k4n ip.txt
-t '.':指定点号 . 作为分隔符 ,-k1n:按第 1 段数字排序。sort -n bigfile.txt -o bigfile.txt
-o:参数是 sort 独有的安全覆盖方式。也就是数字排序并直接保存到原文件。5:目录大小排序
一般用于排除那个文件或者目录占用较大空间的排查,比较实用。
四、高频组合速记
- txt/csv排序:
sort -t ',' -k3n - 统计TopN:
sort | uniq -c | sort -nr | head
五、注意事项
- 多字段用
-k start,end 限定范围,避免整行参与 - 去重用
sort -u 比 sort|uniq 更高效
sort是linux文本处理的基石命令,配合 awk、uniq、grep 可完成 90% 日志与数据清洗。把上面 12 个示例练熟,日常运维、数据排查效率直接翻倍。如果觉得文章对你的运维工作有帮助,记得点赞加关注。