1. 命令概述:为什么需要uniq
在Linux系统日常运维和数据处理中,我们经常会遇到需要处理重复数据的场景。比如分析日志文件时,相同的错误信息重复出现;统计访问IP时,需要去除重复的地址;合并多个配置文件时需要清理重复条目。这时候,uniq命令就是你的瑞士军刀。
uniq是unique的缩写,这个命令诞生于早期的Unix系统,专为处理排序后的文本数据设计。它的核心功能是检测相邻的重复行并进行去重或计数。与直接使用sort -u不同,uniq命令提供了更精细的控制能力——可以只显示重复行、只显示唯一行、或者统计重复次数。
重要提示:uniq命令只能处理已排序的输入,因为它仅比较相邻行。如果文件未排序,请先使用sort命令处理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心参数深度解析
2.1 基础去重模式
最基础的用法是直接去除连续的重复行:
bash复制$ cat test.txt
apple
apple
banana
cherry
cherry
$ uniq test.txt
apple
banana
cherry
这里有个实际运维中的典型应用场景:假设我们有一个包含重复时间戳的日志文件,通过uniq可以快速压缩日志体积:
bash复制$ uniq /var/log/nginx/access.log > compressed.log
2.2 计数模式(-c参数)
-c参数会在每行前显示重复次数,这在统计分析时特别有用:
bash复制$ uniq -c test.txt
2 apple
1 banana
2 cherry
我曾经用这个功能分析过服务器遭受的暴力破解攻击。通过统计失败登录尝试的IP出现次数,快速定位攻击源:
bash复制$ grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
183 221.194.44.207
92 61.147.123.45
2.3 仅显示重复行(-d参数)
-d参数让uniq只输出重复出现的行,这在查找重复配置时特别实用:
bash复制$ uniq -d config
