做什么
去除相邻的重复行。所以通常先 sort。
常用参数
| 参数 | 含义 |
|---|---|
-c |
每行前加出现次数 |
-d |
只输出重复行 |
-u |
只输出唯一行(不重复的) |
-i |
忽略大小写 |
-f N |
忽略前 N 个字段 |
-s N |
忽略前 N 个字符 |
实战
sort file.txt | uniq # 去重
sort file.txt | uniq -c # 去重 + 计数
sort file.txt | uniq -c | sort -rn # 按次数倒序("出现最多")
# 只看重复出现的
sort file.txt | uniq -d
# 只看出现过一次的
sort file.txt | uniq -u
经典套路:Top N
# Nginx 日志:top 10 访问 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# 系统日志:错误类型频次
grep ERROR /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -rn
# 看某文件里出现次数最多的词
cat file.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head
坑
- uniq 只去除相邻重复——非相邻的不会去!所以几乎总要先 sort
sort -u是sort | uniq的简写,更快——除非你要uniq -c,否则用sort -u- 大小写敏感——
Hello和hello算两行,要-i忽略