uniq 命令 #
uniq
命令用于报告或忽略文件中的重复行。它通常与sort
命令一起使用,因为uniq
只检测相邻的重复行。
语法 #
uniq [选项] [输入文件 [输出文件]]
常用选项 #
选项 | 描述 |
---|---|
-c, --count |
在每行前面显示重复的次数 |
-d, --repeated |
只显示重复的行,每组重复的行只显示一次 |
-D, --all-repeated[=分隔方法] |
显示所有重复的行,分隔方法可以是none 、prepend 或separate |
-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
或其他工具