uniq命令

uniq 命令 #

uniq命令用于报告或忽略文件中的重复行。它通常与sort命令一起使用,因为uniq只检测相邻的重复行。

语法 #

uniq [选项] [输入文件 [输出文件]]

常用选项 #

选项 描述
-c, --count 在每行前面显示重复的次数
-d, --repeated 只显示重复的行,每组重复的行只显示一次
-D, --all-repeated[=分隔方法] 显示所有重复的行,分隔方法可以是noneprependseparate
-f, --skip-fields=N 忽略前 N 个字段
-i, --ignore-case 忽略大小写差异
-s, --skip-chars=N 忽略前 N 个字符
-u, --unique 只显示不重复的行
-z, --zero-terminated 以 NUL 字符而不是换行符分隔行
-w, --check-chars=N 只比较每行的前 N 个字符

常见用法 #

1. 删除重复行 #

uniq file.txt

sort file.txt | uniq

2. 计数每行出现的次数 #

sort file.txt | uniq -c

输出示例:

      3 apple
      2 banana
      1 cherry
      4 date

3. 只显示重复的行 #

sort file.txt | uniq -d

4. 显示所有重复的行 #

sort file.txt | uniq -D

5. 只显示不重复的行 #

sort file.txt | uniq -u

6. 忽略大小写 #

sort file.txt | uniq -i

7. 忽略前 N 个字段 #

sort file.txt | uniq -f 2

这会忽略每行的前两个字段,然后比较其余部分。

8. 忽略前 N 个字符 #

sort file.txt | uniq -s 5

这会忽略每行的前 5 个字符,然后比较其余部分。

9. 只比较前 N 个字符 #

sort file.txt | uniq -w 10

这只比较每行的前 10 个字符。

10. 显示所有重复的行,并用空行分隔每组 #

sort file.txt | uniq -D --all-repeated=separate

与其他命令结合使用 #

1. 查找文件中最常见的行 #

sort file.txt | uniq -c | sort -nr

这会按出现次数降序排序。

2. 查找文件中唯一的行 #

sort file.txt | uniq -u

3. 查找文件中重复的行 #

sort file.txt | uniq -d

4. 计算文件中不同行的数量 #

sort file.txt | uniq | wc -l

5. 查找日志文件中重复的错误消息 #

grep "ERROR" logfile.txt | sort | uniq -c

6. 比较两个文件的共同行 #

sort file1.txt file2.txt | uniq -d

7. 查找只在一个文件中出现的行 #

sort file1.txt file2.txt | uniq -u

实用示例 #

1. 查找最常访问的 IP 地址 #

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

2. 查找最常见的 HTTP 状态码 #

awk '{print $9}' access.log | sort | uniq -c | sort -nr

3. 查找重复的文件名 #

find . -type f | sed 's/.*\///' | sort | uniq -d

4. 查找系统中的重复用户 #

cut -d: -f1 /etc/passwd | sort | uniq -d

5. 查找重复的单词 #

tr ' ' '\n' < file.txt | sort | uniq -c | sort -nr

6. 查找两个文件的差异行 #

# 只在file1.txt中出现的行
sort file1.txt file2.txt file2.txt | uniq -u

# 只在file2.txt中出现的行
sort file2.txt file1.txt file1.txt | uniq -u

7. 查找 CSV 文件中重复的记录 #

# 假设第1列是ID
cut -d, -f1 data.csv | sort | uniq -d

提示 #

  • uniq命令只检测相邻的重复行,所以通常需要先使用sort命令对文件进行排序
  • 使用-c选项可以计数每行出现的次数,这在分析日志文件时特别有用
  • 使用-d选项可以只显示重复的行,而-u选项可以只显示不重复的行
  • 使用-i选项可以忽略大小写差异
  • 使用-f-s选项可以忽略行的某些部分,这在处理格式化数据时很有用
  • 使用-w选项可以限制比较的字符数,这在只需要比较行的前缀时很有用
  • 在处理大文件时,sort | uniq组合可能比其他方法更高效
  • 在脚本中,通常使用sort | uniq -c | sort -nr组合来查找最常见的项目
  • 如果需要更复杂的重复检测,可以考虑使用awk或其他工具