Linux系统之uniq命令基本使用
一、uniq命令介绍
1.1 简介
uniq
是Ubuntu/Linux系统中一个非常实用的文本处理工具,主要用于检测、过滤和统计重复的行。虽然功能简单,但在日志分析、数据清洗等场景下非常有用。
1.2 基本概念与工作原理
什么是uniq?
uniq
命令用于从已排序的文本文件中识别和操作重复的行。它可以:
- 删除连续的重复行,只保留唯一行
- 统计重复行的出现次数
- 只显示重复行或只显示唯一行
⚠️ 重要限制:必须先排序!
uniq
只能识别相邻的重复行。如果重复行不相邻,它无法检测到。因此通常需要先使用sort
命令排序。
# 错误用法:重复行不相邻,uniq无效
cat file.txt
apple
banana
apple
cherry
uniq file.txt
# 输出:
# apple
# banana
# apple
# cherry
# 正确用法:先排序再去重
sort file.txt | uniq
# 输出:
# apple
# banana
# cherry
二、 安装与基本语法
2.1 uniq软件安装
uniq
通常包含在GNU coreutils包中,Ubuntu系统默认已安装。如果未安装,可以使用:
apt update
apt install coreutils
2.2 基本语法
uniq [选项] [输入文件] [输出文件]
🛠️ 常用参数详解
参数 | 功能描述 | 示例 |
---|---|---|
-c |
在每行前显示重复次数 | uniq -c file.txt |
-d |
只显示重复的行(每组显示一次) | uniq -d file.txt |
-D |
显示所有重复的行 | uniq -D file.txt |
-u |
只显示不重复的行 | uniq -u file.txt |
-i |
忽略大小写 | uniq -i file.txt |
-f N |
跳过前N个字段进行比较 | uniq -f 2 file.txt |
-s N |
跳过前N个字符进行比较 | uniq -s 5 file.txt |
-w N |
只比较每行的前N个字符 | uniq -w 10 file.txt |
三、基本使用
3.1 创建测试文件
创建测试文件fruits.txt
:
cat > fruits.txt << EOF
apple
banana
apple
orange
banana
banana
grape
APPLE
orange
EOF
3.2 基础去重(必须先排序)
直接使用 uniq 无效,因为该命令只能去除相邻的重复行,若重复行不相邻,则所有行都会被显示。
root@jeven:~# uniq fruits.txt
apple
banana
apple
orange
banana
grape
APPLE
orang
我们先排序再去重(正确用法),可正常去重。
root@jeven:~# sort fruits.txt | uniq
apple
APPLE
banana
grape
orang
orange
3.3 统计重复次数(最常用)
- 统计重复次数
root@jeven:~# sort fruits.txt | uniq -c
2 apple
1 APPLE
3 banana
1 grape
1 orang
1 orange
3.4 只显示重复的行
- 显示有重复的行(每组显示一次)
root@jeven:~# sort fruits.txt | uniq -d
apple
banana
- 显示所有重复的行
root@jeven:~# sort fruits.txt | uniq -D
apple
apple
banana
banana
banana
3.5 只显示唯一的行
root@jeven:~# sort fruits.txt | uniq -u
APPLE
grape
orang
orange
3.6 忽略大小写比较
使用-i和-c选项,进行忽略大小写输出, 统计重复次数。
root@jeven:~# sort fruits.txt | uniq -i -c
3 apple
3 banana
1 grape
1 orang
1 orange
3.7 高级字段处理
执行以下命令,进行创建包含多个字段的测试文件
data.txt
。
cat > data.txt << EOF
01 John Sales 50000
02 Jane IT 60000
03 Bob Sales 55000
04 Alice IT 65000
05 Tom Sales 52000
EOF
使用
awk
提取每行的第3个字段(部门),通过sort
排序后,再用uniq -c
统计各部门出现的次数。
root@jeven:~# awk '{print $3}' data.txt | sort | uniq -c
2 IT
3 Sales
四、 实际运维场景应用
4.1 分析日志文件状态码
从 Nginx 访问日志中筛选出 4xx 和 5xx 错误状态码,使用 uniq -c 统计各类错误出现次数,并按频率降序排列。
awk '$9 ~ /^4[0-9][0-9]$/ || $9 ~ /^5[0-9][0-9]$/' /var/log/nginx/access.log | \
awk '{print $9}' | \
sort | \
uniq -c | \
sort -nr
4.2 统计系统用户登录次数
分析auth.log中的用户登录次数,可执行以下命令:
root@jeven:~# grep "session opened" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
714 root(uid=0)
root@jeven:~#
4.3 检查配置文件中的重复项
检查SSH配置是否有重复设置
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$" | sort | uniq -d
4.4 分析网站访问IP排名
统计Nginx访问日志中前10个最活跃的IP
root@jeven:~# awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
7 192.168.3.83
3 192.168.3.104
2 127.0.0.1
五、总结
uniq
命令是 Linux 系统中用于去重和统计的重要工具,但必须与sort
配合使用才能发挥完整功能。 它通过逐行比较相邻文本实现去重,支持统计重复次数、过滤唯一或重复行等实用功能。 在实际运维中,常用于分析日志状态码、统计访问IP、检查配置重复等场景,提升排查效率。 掌握uniq
的核心用法,能有效简化文本处理任务,是系统管理员不可或缺的基础命令之一。
- 点赞
- 收藏
- 关注作者
评论(0)