做什么

去除相邻的重复行。所以通常先 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 -usort | uniq 的简写,更快——除非你要 uniq -c,否则用 sort -u
  • 大小写敏感——Hellohello 算两行,要 -i 忽略