当前位置:首页>Linux>Linux基础 | uniq命令使用指南(文本去重利器)

Linux基础 | uniq命令使用指南(文本去重利器)

  • 2026-09-07 08:11:34
Linux基础 | uniq命令使用指南(文本去重利器)
在 Linux 文本处理工具链里,有几个命令几乎是“标配”:

sort(排序)

grep(过滤)

awk(字段处理)

uniq(去重)

今天我们专门讲一个经常被低估的命令——uniq。
如果你做过日志分析、数据清洗、统计频次,那么 uniq 一定用得上。

一、uniq 是干什么的?

uniq 的核心作用是:去除“相邻重复”的行。
注意四个字:相邻重复。
它并不是全局去重,而是只处理连续重复的内容。

二、最基础用法

假设有一个文件 data.txt:

apple

apple

banana

banana

banana

orange

执行:
uniq data.txt
输出:
applebananaorange
可以看到,重复的行被合并了。

三、重要前提:通常要配合 sort

如果文件是这样:

apple

banana

apple

banana

直接执行:
uniq data.txt
结果不会去重。
因为 apple 和 apple 不是“相邻”。
正确做法是:
sort data.txt | uniq
这一步是很多人踩坑的地方。
经验口诀:先 sort,再 uniq。

四、统计重复次数(最常用)

使用 -c 参数:
sort data.txt | uniq -c
输出:

2 apple

3 banana

1 orange

这在统计访问日志、IP 频率时非常有用。
例如统计访问最多的 IP:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr
这是一条经典运维命令链。

五、只显示重复行

如果你只关心“重复出现的内容”,使用 -d:
sort data.txt | uniq -d
输出:

apple

banana

这常用于查找异常数据。

六、只显示不重复行

使用 -u:
sort data.txt | uniq -u
输出:
orange
适合筛选唯一值。

七、忽略大小写

如果文件中有:

Apple

apple

APPLE

可以使用:
sort data.txt | uniq -i
-i 表示忽略大小写。

八、按字段去重

uniq 还支持忽略前几个字段。
例如:

100 Tom

101 Tom

102 Jack

如果你只想按姓名去重,可以结合 -f 参数。
-f 1 表示忽略第1个字段:
sort data.txt -k2 | uniq -f 1
这在结构化文本处理中很常见。

九、实际运维场景

场景 1:统计访问频率
awk '{print $1}' access.log | sort | uniq -c | sort -nr
找出访问最多的 IP。
场景 2:查找重复用户
sort users.txt | uniq -d
找出重复注册的用户名。
场景 3:统计错误类型
grep ERROR app.log | sort | uniq -c
快速统计错误类别数量。

十、uniq 的底层逻辑

uniq 的工作机制非常简单:

逐行读取

与上一行比较

相同则合并

因此效率很高,但也决定了它必须依赖排序。

十一、常见参数总结

参数
作用
-c
统计出现次数
-d
只显示重复行
-u
只显示唯一行
-i
忽略大小写
-f N
忽略前 N 个字段
掌握 -c 和 -d 基本可以应对 80% 场景。

十二、uniq vs sort -u

很多人会问:
sort -u data.txt
和:
sort data.txt | uniq
有什么区别?
答案是:效果类似,但 sort -u 更简洁。
不过如果你需要统计次数,必须使用 uniq -c。

总结

关于 uniq,你需要记住:
它处理的是“相邻重复”,通常要配合 sort 使用
uniq -c 是高频用法
在日志分析中极其常见
在 Linux 文本处理体系中,uniq 属于:小而精,但极具实战价值的工具。
如果你正在学习 Linux 运维或数据处理,uniq 是必须掌握的一环。
如果这篇文章对你有帮助,欢迎点赞、收藏、转发。
我们继续深入 Linux 基础命令系列。

最新文章

随机文章