本文目录导读:

在脚本中使用 uniq 命令时,统计次数是通过 -c(或 --count)选项实现的。uniq -c 会在每行前面加上该行连续出现的次数。
基本用法
# 统计每个唯一行的出现次数 sort file.txt | uniq -c # 按次数降序排列(最常用的统计方式) sort file.txt | uniq -c | sort -rn
完整示例
假设有个文件 fruits.txt:
apple
banana
apple
orange
banana
apple
统计每种水果出现次数:
sort fruits.txt | uniq -c
输出:
3 apple
2 banana
1 orange
按次数降序排列:
sort fruits.txt | uniq -c | sort -rn
输出:
3 apple
2 banana
1 orange
关键点说明
- 必须先排序:
uniq只去除 连续重复 的行,所以通常先sort - 统计格式:
uniq -c输出格式为次数 内容(次数默认右对齐) - 调整输出格式:
# 去掉前导空格 sort file.txt | uniq -c | sed 's/^ *//' # 或使用 awk 格式化 sort file.txt | uniq -c | awk '{print $1,$2}'
实际场景示例
分析日志中的 IP 访问次数
# 从日志提取 IP,统计访问次数最多的前10个
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
统计单词出现频率
# 统计文件中每个单词出现次数 cat file.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn
统计错误类型
# 统计不同错误类型出现次数
grep 'ERROR' app.log | awk '{print $NF}' | sort | uniq -c | sort -rn
常见问题
- 忘记排序:
uniq只比较相邻行,未排序会得到错误统计 - 大小写敏感:Apple 和 apple 会被视为不同
# 忽略大小写统计 sort -f file.txt | uniq -c | sort -rn
- 空格处理:行首/行尾空格会影响判断
# 去除行首行尾空格后统计 awk '{$1=$1;print}' file.txt | sort | uniq -c
进阶:处理大型文件
对于超大文件,可以使用 sort 的临时文件:
sort --parallel=4 -S 1G file.txt | uniq -c | sort -rn > result.txt
uniq -c 是最简单高效的统计去重次数的方法,配合 sort 和管道可以满足大部分统计需求。