Linux 命令 uniq 是一个在文本处理中非常实用的工具,主要用于帮助用户从输入中移除重复的相邻行,尽管它的功能看似简单,但在处理日志分析、数据清洗和报告生成等任务时,uniq 命令能够发挥重要作用,通过合理运用 uniq 命令及其选项,用户可以高效地完成对重复数据的去重、统计和筛选操作。

uniq 命令的基本用法
uniq 命令的基本语法为 uniq [选项] [输入文件 [输出文件]],默认情况下,uniq 命令会从标准输入或指定输入文件中读取数据,并移除所有相邻的重复行,然后将结果输出到标准输出或指定的输出文件中,需要注意的是,uniq 命令仅对相邻的重复行生效,如果重复行不相邻,则无法直接去重,在实际使用中,通常需要先通过 sort 命令对文件进行排序,确保重复行相邻,然后再使用 uniq 命令处理。
假设有一个名为 example.txt 的文件,内容如下:
apple
banana
apple
orange
banana
直接使用 uniq example.txt 命令,输出结果为:
apple
banana
orange
banana
可以看到,第二行和第三行的重复行 “apple” 被移除,但第一行和第五行的 “banana” 因不相邻而未被处理,若需完全去重,应先使用 sort example.txt | uniq 命令,此时输出结果为:
apple
banana
orange
uniq 命令的常用选项
uniq 命令提供了多个选项,以增强其功能并满足不同的处理需求,以下是几个常用的选项及其作用:
-
-c 或 –count:在输出行的同时,统计每行出现的次数。
sort example.txt | uniq -c的输出结果为:2 apple 2 banana 1 orange该选项在统计重复行频率时非常有用,常用于日志分析或数据统计场景。
-
-d 或 –repeated:仅显示重复出现的行。
sort example.txt | uniq -d的输出结果为:apple banana该选项适用于快速定位文件中的重复数据。
-
-u 或 –unique:仅显示不重复的行。
sort example.txt | uniq -u的输出结果为:
orange该选项可用于筛选文件中唯一存在的行。
-
-f N 或 –skip-fields=N:跳过前 N 个字段,比较剩余部分是否重复,字段之间的分隔符默认为空格或制表符,对于文件
data.txt内容为:101 apple red 102 banana yellow 101 apple green使用
uniq -f 1 data.txt命令,会跳过第一个字段(数字),比较剩余部分,输出结果为:101 apple red 102 banana yellow因为第三行与第一行在跳过第一个字段后相同,因此被移除。
-
-s N 或 –skip-chars=N:跳过前 N 个字符,比较剩余部分是否重复。
uniq -s 2 example.txt会跳过每行的前两个字符进行比较。 -
-w N 或 –check-chars=N:仅比较每行的前 N 个字符。
uniq -w 3 example.txt只比较每行的前三个字符是否相同。
uniq 命令的实际应用场景
uniq 命令在实际工作中有着广泛的应用,以下列举几个典型场景:
日文件分析
在服务器管理中,日志文件通常包含大量重复的记录,分析 Web 服务器访问日志时,可能需要统计每个 IP 地址的访问次数,假设 access.log 文件包含 IP 地址列表,使用以下命令可以统计每个 IP 的访问次数:
sort access.log | uniq -c | sort -nr
该命令首先对日志文件按 IP 地址排序,然后使用 uniq 统计次数,最后按访问次数降序排列,便于快速定位高频访问的 IP。
数据清洗
在数据处理过程中,可能需要从数据集中移除重复项,一个包含用户信息的文件 users.txt 可能存在重复的用户记录,使用以下命令可以生成去重后的用户列表:

sort users.txt | uniq > unique_users.txt
此操作确保了最终文件中无重复的用户数据。
生成唯一值列表
在某些场景下,可能需要提取文件中的唯一值,从 products.txt 文件中提取所有不重复的产品类别:
sort products.txt | uniq -u > unique_categories.txt
该命令仅保留不重复的类别行,适用于需要筛选唯一数据的场景。
uniq 命令与其他命令的组合使用
uniq 命令通常与其他 Linux 命令结合使用,以实现更复杂的文本处理功能,以下是一些常见的组合:
与 sort 命令组合
如前所述,sort 命令用于对文件进行排序,确保重复行相邻,从而配合 uniq 命令完成完全去重。
sort file.txt | uniq > sorted_unique.txt
与 grep 命令组合
grep 命令用于筛选包含特定模式的行,结合 uniq 可以实现模式去重,从日志文件中提取包含 “error” 的行并统计错误类型:
grep "error" app.log | sort | uniq -c
与 awk 命令组合
awk 命令支持更复杂的文本处理,可与 uniq 结合实现多列去重,对文件 data.txt 的第一列和第二列进行去重:
awk '{print $1, $2}' data.txt | sort | uniq > unique_data.txt
uniq 命令的注意事项
在使用 uniq 命令时,需要注意以下几点:
- 排序要求:uniq 仅对相邻行去重,因此通常需要先通过 sort 排序。
- 字段和字符比较:使用
-f或-s选项时,确保理解字段和字符的定义,避免错误跳过比较部分。 - 大小写敏感:uniq 命令默认区分大小写,”Apple” 和 “apple” 会被视为不同行,若需忽略大小写,可先使用
sort -f命令进行不区分大小写的排序。 - 文件权限:确保对输入文件有读取权限,对输出文件有写入权限,否则命令会报错。
Linux 命令 uniq 虽然功能单一,但在文本处理中却不可或缺,通过掌握其基本用法和常用选项,并结合 sort、grep 等命令,用户可以高效地完成去重、统计和筛选等任务,无论是日志分析、数据清洗还是报告生成,uniq 命令都能提供简洁而强大的解决方案,在实际工作中,灵活运用 uniq 命令将显著提升文本处理的效率和准确性。


















