Linux 的 uniq 命令 uniq是 Linux 和 Unix 系统中一个非常实用的文本处理命令用于检测、过滤和报告相邻的重复行。它通常与sort命令结合使用是 Shell 脚本和日常文本处理中不可或缺的工具。1. 命令基本语法uniq [选项] [输入文件] [输出文件]输入文件要处理的文件。如果未指定则从标准输入读取。输出文件处理结果输出到的文件。如果未指定则输出到标准输出。2. 核心功能与工作原理uniq的核心功能是对相邻的重复行进行操作。它逐行读取输入比较当前行与上一行。如果两行完全相同则根据选项决定是保留、删除还是计数。重要前提uniq默认只处理相邻的重复行。如果重复行不相邻例如分散在文件各处则需要先使用sort命令排序使重复行相邻再用uniq处理。3. 常用选项详解3.1 基础去重与显示-c或--count在每行前显示该行重复的次数。-d或--repeated仅输出重复的行每组重复行只输出一次。-u或--unique仅输出不重复的行即文件中只出现一次的行。3.2 比较控制-i或--ignore-case忽略大小写差异进行比较。-f N或--skip-fieldsN比较时跳过前 N 个字段字段由空格或制表符分隔。-s N或--skip-charsN比较时跳过前 N 个字符。-w N或--check-charsN只比较每行的前 N 个字符。4. 实战示例假设我们有一个日志文件access.log内容如下192.168.1.1 GET /index.html192.168.1.2 POST /login192.168.1.1 GET /index.html192.168.1.3 GET /about192.168.1.1 GET /index.html192.168.1.2 POST /login示例 1基本去重需先排序sortaccess.log|uniq输出192.168.1.1 GET /index.html 192.168.1.2 POST /login 192.168.1.3 GET /about示例 2统计每行出现次数sortaccess.log|uniq-c输出3 192.168.1.1 GET /index.html 2 192.168.1.2 POST /login 1 192.168.1.3 GET /about示例 3仅显示重复行sortaccess.log|uniq-d输出192.168.1.1 GET /index.html 192.168.1.2 POST /login示例 4忽略特定字段进行比较假设我们只关心 IP 地址忽略请求方法和路径sort-k1,1 access.log|uniq-f1这里sort -k1,1先按第一个字段IP排序然后uniq -f 1跳过第一个字段进行比较最终每个 IP 只保留一行。5. 经典组合sort | uniq由于uniq只能处理相邻重复sort | uniq成为处理文件中所有重复行的标准流程sort将文件所有行排序使相同内容的行相邻。uniq对排序后的相邻重复行进行去重或统计。这个组合非常高效常用于日志分析、数据清洗和列表去重。6. 注意事项与常见误区必须理解“相邻”原则直接对未排序文件使用uniq可能无法去除所有重复。空白行处理空行也被视为一行内容uniq会对其进行处理。字段与字符跳过的区别-f跳过的是由空格/制表符分隔的字段-s跳过的是字符无论其是否在字段边界。输出重定向可以使用或将结果保存到文件例如uniq input.txt output.txt。7. 总结uniq命令虽然简单但功能强大且灵活。掌握其与sort的组合使用可以高效解决许多文本去重和统计问题。记住它的核心是处理相邻重复行这是正确使用该命令的关键。