Linux系统之uniq命令基本使用

举报
江湖有缘 发表于 2025/09/24 22:34:11 2025/09/24
【摘要】 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 的核心用法,能有效简化文本处理任务,是系统管理员不可或缺的基础命令之一。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。