一、前言

在 Linux/Unix 系统中,uniq 是一个非常实用的文本处理命令,用于对重复的行进行统计、去重和筛选。它通常与 sort 搭配使用,以实现高效的文本数据清洗与统计分析。

无论是做日志分析、访问频率统计,还是编写自动化脚本,uniq 都是一个不可或缺的工具。

本文将带你全面了解 uniq 工具的使用方式,包括:

uniq 的基本语法与常用参数
✅ 如何统计重复行、去重输出、查找唯一行
uniq 在 Shell 脚本中的实战应用
✅ 与其他文本处理命令的联合使用
✅ 实际开发中的常见问题与优化建议

并通过完整的代码示例帮助你快速上手并熟练掌握 uniq 的各种高级用法。

二、什么是 uniq?

uniq 是一个用于 过滤或报告重复行 的命令行工具。它默认只会比较 相邻的行,因此常与 sort 结合使用。

✅ 典型用途包括:

场景示例
日志分析提取唯一的 IP 地址
数据统计统计某字段出现次数
自动化脚本快速去重输出结果
访问监控查找高频访问用户
文件清理去除重复行

三、uniq 基础语法

uniq [选项] [输入文件] [输出文件]

✅ 常用选项说明:

参数描述
-c显示每行出现的次数
-d只显示重复的行(每组只输出一次)
-u只显示唯一的行
-i忽略大小写比较
-f N忽略前 N 个字段再比较
-s N忽略前 N 个字符再比较
-w N对每行前 N 个字符进行比较

四、uniq 使用示例

✅ 示例1:基础去重输出

echo -e "apple\nbanana\napple\norange" > fruits.txt
sort fruits.txt | uniq

输出:

apple
banana
orange

⚠️ 注意:uniq 只会合并相邻的相同行,所以必须先排序!

✅ 示例2:统计每行出现次数(-c

sort fruits.txt | uniq -c

输出:

      2 apple1 banana1 orange

✅ 示例3:只显示重复行(-d

sort fruits.txt | uniq -d

输出:

apple

✅ 示例4:只显示唯一行(-u

sort fruits.txt | uniq -u

输出:

banana
orange

✅ 示例5:忽略大小写比较(-i

echo -e "Apple\napple\nBANANA" > mixed.txt
sort -f mixed.txt | uniq -i

输出:

Apple
BANANA

五、uniq 在 Shell 脚本中的应用

✅ 示例1:统计访问最多的 IP 地址

cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10

输出类似:

123 192.168.1.100
98 192.168.1.101
...

✅ 示例2:提取配置文件中的唯一变量名

grep '=' config.env | cut -d'=' -f1 | sort | uniq

输出所有变量名并去重。

✅ 示例3:查找重复的用户名(从 /etc/passwd

cut -d':' -f1 /etc/passwd | sort | uniq -d

输出重复的用户名(如果有的话)。

六、uniq 与其他命令的配合使用

✅ 示例1:统计访问最多的 URL(uniq + cut + sort

cut -d'"' -f2 access.log | cut -d' ' -f2 | sort | uniq -c | sort -nr | head -n 10

输出访问最多的前 10 个 URL。

✅ 示例2:找出未被访问的页面(uniq + grep

comm -23 <(sort all_pages.txt) <(sort visited_pages.txt)

输出在 all_pages.txt 中但不在 visited_pages.txt 中的页面。

✅ 示例3:结合 awk 过滤特定数量的行

sort data.txt | uniq -c | awk '$1 >= 3'

输出出现次数大于等于 3 的行。

七、uniq 使用技巧总结

技巧说明
✅ 总是先排序再使用 uniq否则无法识别非连续重复行
✅ 使用 -c 统计出现次数适用于访问统计、频率分析
✅ 使用 -d 提取重复项快速定位异常数据
✅ 使用 -u 提取唯一项快速获取不重复数据
✅ 使用 -i 忽略大小写更灵活匹配关键词
✅ 结合 awk 过滤特定频率的数据实现复杂逻辑
✅ 使用 comm 找出差异对比两个文件内容

八、uniq 实战案例汇总

✅ 案例1:从 /etc/passwd 提取唯一用户名

cut -d':' -f1 /etc/passwd | sort | uniq

✅ 案例2:统计访问最多的 IP 并排序

cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10

✅ 案例3:找出两个文件的交集

sort file1.txt file2.txt | uniq -d

九、常见问题与解决方法

问题原因解决方案
无法识别非连续重复行未使用 sort 排序添加 sort 再调用 uniq
去重无效使用了错误参数检查是否使用了 -d 或 -u
输出乱码编码不一致使用 iconv 或设置 LANG=C
忽略字段错误参数 -f 设置不当检查字段索引是否正确
统计结果异常输入数据格式混乱使用 tr 或 awk 预处理

十、总结对比表:uniq 常用参数一览

参数功能
-c显示每行出现次数
-d只显示重复行
-u只显示唯一行
-i忽略大小写
-f忽略前 N 个字段
-s忽略前 N 个字符
-w对每行前 N 字符进行比较

十一、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89703.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89703.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89703.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

氛围编码(Vice Coding)的工具选择方式

一、前言 在写作过程中&#xff0c;我受益于若干优秀的博客分享&#xff0c;它们给予我宝贵的启发&#xff1a; 《5分钟选对AI编辑器&#xff0c;每天节省2小时开发时间让你早下班&#xff01;》&#xff1a;https://mp.weixin.qq.com/s/f0Zm3uPTcNz30oxKwf1OQQ 二、AI编辑的…

[硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类

根据电子元器件的受控程度&#xff0c;可将其分为不受控、半受控、完全受控三大类。这种分类基于元器件的工作状态是否需要外部信号&#xff08;如电压、电流、光、热等&#xff09;的主动调控&#xff0c;以及调控的精确性和灵活性。以下是具体分类及实例说明&#xff1a;一、…

基于Pytorch的人脸识别程序

人脸识别原理详解人脸识别是模式识别和计算机视觉领域的重要研究方向&#xff0c;其目标是从图像或视频中识别出特定个体的身份。现代人脸识别技术主要基于深度学习方法&#xff0c;特别是卷积神经网络 (CNN)&#xff0c;下面从多个维度详细解析其原理&#xff1a;1. 人脸识别的…

ubuntu 开启ssh踩坑之旅

文章目录确认当前用户为普通用户 or root命令使用ssh还是sshd服务名称的由来apt update和apt upgrade的关系apt upgrade报错&#xff1a;“E: 您在 /var/cache/apt/archives/ 上没有足够的可用空间”开启ssh步骤错误排查查看日志修改sshd_config文件允许防火墙通过22端口确认当…

力扣:动态规划java

sub07 线性DP - O(1) 状态转移2_哔哩哔哩_bilibili 跳楼梯 class Solution {public int climbStairs(int n) {if (n < 1) {return 1; // 处理边界情况}int[] dp new int[n 1]; // 创建长度为n1的数组&#xff0c;比方说跳二级楼梯dp[0] 1; // 初始值设定dp[1] 1;for (…

React Native打开相册选择图片或拍照 -- react-native-image-picker

官方文档&#xff1a;https://www.npmjs.com/package/react-native-image-picker 场景&#xff1a;点击按钮打开相册选择图片或者点击按钮拍照 import { launchCamera, launchImageLibrary } from react-native-image-picker;// ... <TouchableOpacityactiveOpacity{0.7}o…

USRP B210生成信号最大带宽测试之Frank

书接上文&#xff1a; USRP B210生成LFM,SFM,BPSK,Frank信号的最大带宽测试&#xff08;一&#xff09; USRP B210生成信号最大带宽测试&#xff08;二&#xff09;SFM USRP B210生成信号最大带宽测试&#xff08;三&#xff09;LFM USRP B210生成信号最大带宽测试之BPSK …

pages.json页面路由中,globalStyle的各个属性

欢迎来到我的UniApp技术专栏&#xff01;&#x1f389; 在这里&#xff0c;我将与大家分享关于UniApp开发的实用技巧、最佳实践和项目经验。 专栏特色&#xff1a; &#x1f4f1; 跨平台开发一站式解决方案 &#x1f680; 从入门到精通的完整学习路径 &#x1f4a1; 实战项目经…

[前端技术基础]CSS选择器冲突解决方法-由DeepSeek产生

在 CSS 中&#xff0c;当多个选择器对同一元素的相同属性&#xff08;如颜色&#xff09;定义发生冲突时&#xff0c;浏览器会通过层叠规则&#xff08;Cascading&#xff09;解决冲突。具体优先级从高到低如下&#xff1a;1. !important 规则&#xff08;最高优先级&#xff0…

解决 IDEA 中 XML 文件的 “URI is not registered” 报错

解决 IDEA 中 XML 文件的 “URI is not registered” 报错 在使用 IDEA 开发时&#xff0c;XML 文件&#xff08;尤其是带有 DTD 约束的配置文件&#xff0c;如 MyBatis、Spring 配置文件&#xff09;常出现 URI is not registered (Settings | Languages & Frameworks | S…

FreeBSD Conda Python3.12下安装GPT4Free(g4f)0.5.7.3版本

FreeBSD下不能直接安装g4f&#xff0c;因为Curl_cffi这个库装不上。0.5.0.3这个版本不需要这个库&#xff0c;所以可以安装。 那么就没有办法安装新版本了吗&#xff1f; 有的&#xff0c;就是在linux仿真环境下。 Linux仿真环境安装g4f 最简单的方法是使用chroot进入linux仿…

Node.js 中基于请求 ID 实现简单队列(即时阻止策略/排队等待策略)

在Node.js 中基于请求 ID 实现简单队列 下面示例演示两种策略&#xff0c;以同一个请求 ID 为单位&#xff1a; 即时阻止策略&#xff1a;如果已有相同 ID 的请求在处理&#xff0c;直接报错并返回。 排队等待策略&#xff1a;后续相同 ID 的请求不报错&#xff0c;而是挂起&…

详解如何解决Mysql主从复制延迟

解决 MySQL 主从复制延迟需要从架构设计、参数调优、硬件优化等多维度综合处理。一、根本原因分析主从延迟的本质是&#xff1a;从库的 SQL 线程重放速度 < 主库的写入速度 常见瓶颈点&#xff1a;单线程回放&#xff08;MySQL 5.6 前&#xff09;从库硬件配置低&…

Spring之事务使用指南

Spring之事务使用指南一、事务的基础概念1.1 什么是事务&#xff1f;1.2 事务的ACID特性1.3 Spring事务的核心优势二、Spring事务的核心配置三、事务传播行为&#xff08;Propagation&#xff09;3.1 常用传播行为详解3.1.1 REQUIRED&#xff08;默认值&#xff09;3.1.2 SUPPO…

基于FPGA的多级流水线加法器verilog实现,包含testbench测试文件

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统原理简介 5.参考文献 6.完整工程文件 1.课题概述 流水线&#xff08;Pipeline&#xff09;技术源于工业生产中的装配线理念&#xff0c;在数字电路中&#xff0c;它将一个复杂运算任务分解为若干个子任务&#xff0c;每…

5.1.4习题精讲

一、单项选择题 01. 下列部件不属于控制器的是&#xff08; C &#xff09;。 题目原文 下列部件不属于控制器的是&#xff08; &#xff09;。 A. 指令寄存器 B. 程序计数器 C. 程序状态字寄存器 D. 时序电路 正确答案&#xff1a;C 题目解析 考点分析&#xff1a; 本题考察CP…

华为云Flexus+DeepSeek征文|低代码 × 强推理:华为云 Flexus 搭建可部署的 AI Agent 实践方案【搭建宠物养护小知识AI助手】

文章目录华为云FlexusDeepSeek征文&#xff5c;低代码 强推理&#xff1a;华为云 Flexus 搭建可部署的 AI Agent 实践方案【搭建宠物养护小知识AI助手】&#x1f680; 引言一、核心技术概览1. 华为云 Flexus X2. DeepSeek-R1 模型3. Dify 平台二、总体架构设计三、环境准备与资…

基于智慧经营系统的学校住宿登记报表分析与应用探究-毕业论文—仙盟创梦IDE

摘要本文聚焦学校住宿场景&#xff0c;以 “未来之窗智慧经营&#xff08;学校住宿&#xff09;” 系统生成的日报表、昨日报表、本月报表为研究对象&#xff0c;深入剖析报表数据结构、功能价值及在住宿管理中的应用。通过解读水费、电费、押金、房费、总计、订单等数据维度&a…

arping(ARP协议网络测试工具)

1. 项目介绍&#xff1a;arping 是一个用于在局域网&#xff08;LAN&#xff09;中查找特定 IP 地址是否被占用的实用工具。与传统的 ping 命令不同&#xff0c;arping 使用 ARP 协议来发送和接收数据包&#xff0c;从而能够检测到那些阻止 ICMP 请求的主机。arping 可以帮助网…

【UE5医学影像可视化】读取dicom数据生成2D纹理并显示

文章目录1.实现目标2.实现过程2.1 数据准备2.2 创建项目2.3 dcmtk库集成2.4 流程&原理2.5 材质2.6 应用实现3.参考资料1.实现目标 本文在UE5中读取本地的dicom文件&#xff0c;解析像素值、窗宽窗位等信息&#xff0c;生成2D纹理&#xff0c;在UE场景中实现简单的2D医学影像…