暗色模式

Linux sort 与 uniq 排序去重实战:从基础到日志统计管道

技术教程
2026-08-07
6
0

sort 与 uniq:文本排序去重的黄金搭档

处理日志、统计报表时,sortuniq 几乎总是成对出现:先排序,再去重计数。这篇用真实命令过一遍最常用的组合,全部在 Ubuntu 24.04 上实测。

sort:排序的十八般武艺

基本排序

sort file.txt              # 按字典序升序(默认)
sort -r file.txt           # 降序
sort -n file.txt           # 按数值排序(10 会排在 9 后面, 字典序会排错)
sort -u file.txt           # 排序并去重(等价 sort | uniq)

最经典的坑是 -n:字典序下 10 排在 2 前面,数值排序才能得到正确顺序。

按"人类可读"大小排序

du -h 输出的是 24K8.6G 这种带单位的字符串,直接 sort 会按字母排(1.7G 排在 210M 前面)。-h 就是为这种场景设计的:

du -sh /usr /var /opt /home /boot /tmp 2>/dev/null | sort -h

sort -h 数值排序与 uniq 计数实战

24K8.6G 严格按真实大小升序——这是 sort -n 做不到的。

uniq:去重与计数

uniq file.txt              # 去除相邻重复行
uniq -c file.txt           # 每行前显示出现次数
uniq -d file.txt           # 只显示重复的行

关键前提uniq 只能去掉相邻的重复行——所以必须先 sortuniq,这也是它俩永远成对出现的原因:

printf "banana\napple\ncherry\nbanana\napple\napple\n" > /tmp/fruits.txt
sort /tmp/fruits.txt       # apple apple apple banana banana cherry
sort -u /tmp/fruits.txt    # apple banana cherry
sort /tmp/fruits.txt | uniq -c   # 3 apple / 2 banana / 1 cherry

sort 与 uniq 基础演示

实战:统计日志里谁最"话多"

排查系统问题时,最常用的套路是"按字段提取 → sort → uniq -c → sort -rn → head"——统计日志里出现最多的进程:

awk '{print $3}' /var/log/syslog \
  | sed 's/\[.*//;s/://' \
  | sort | uniq -c | sort -rn | head -6

输出:

24232 systemd
 1609 kernel
 1532 CRON
  271 containerd
  171 systemd-networkd
  140 cups.cupsd

uniq -c 计数后 sort -rn 按次数降序,一眼看出 systemd 是日志主力——这个管道是"日志分析第一式",配合 grep/sed/awk 三剑客 食用更佳。

小结

场景命令
字典序排序sort file
数值排序sort -n file
人类可读大小排序sort -h
去重(先排序)sort -u file 或 `sort file \uniq`
统计出现次数`sort file \uniq -c \sort -rn`
字段提取后统计`awk '{print $N}' log \sort \uniq -c \sort -rn`

记住一句话:排序去重计数,sort | uniq -c | sort -rn 是万能管道

参考资料

发表评论

暂无评论,快来抢沙发吧!