当前位置: 首页 > news >正文

Linux 的 uniq 命令

uniq是 Linux 和 Unix 系统中一个非常实用的文本处理命令,用于检测、过滤和报告相邻的重复行。它通常与sort命令结合使用,是 Shell 脚本和日常文本处理中不可或缺的工具。

1. 命令基本语法

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

  • 输入文件:要处理的文件。如果未指定,则从标准输入读取。
  • 输出文件:处理结果输出到的文件。如果未指定,则输出到标准输出。

2. 核心功能与工作原理

uniq的核心功能是对相邻的重复行进行操作。它逐行读取输入,比较当前行与上一行。如果两行完全相同,则根据选项决定是保留、删除还是计数。

重要前提uniq默认只处理相邻的重复行。如果重复行不相邻(例如分散在文件各处),则需要先使用sort命令排序,使重复行相邻,再用uniq处理。

3. 常用选项详解

3.1 基础去重与显示

  • -c--count:在每行前显示该行重复的次数。
  • -d--repeated:仅输出重复的行(每组重复行只输出一次)。
  • -u--unique:仅输出不重复的行(即文件中只出现一次的行)。

3.2 比较控制

  • -i--ignore-case:忽略大小写差异进行比较。
  • -f N--skip-fields=N:比较时跳过前 N 个字段(字段由空格或制表符分隔)。
  • -s N--skip-chars=N:比较时跳过前 N 个字符。
  • -w N--check-chars=N:只比较每行的前 N 个字符。

4. 实战示例

假设我们有一个日志文件access.log,内容如下:

192.168.1.1 GET /index.html192.168.1.2 POST /login192.168.1.1 GET /index.html192.168.1.3 GET /about192.168.1.1 GET /index.html192.168.1.2 POST /login

示例 1:基本去重(需先排序)

sortaccess.log|uniq

输出:

192.168.1.1 GET /index.html 192.168.1.2 POST /login 192.168.1.3 GET /about

示例 2:统计每行出现次数

sortaccess.log|uniq-c

输出:

3 192.168.1.1 GET /index.html 2 192.168.1.2 POST /login 1 192.168.1.3 GET /about

示例 3:仅显示重复行

sortaccess.log|uniq-d

输出:

192.168.1.1 GET /index.html 192.168.1.2 POST /login

示例 4:忽略特定字段进行比较

假设我们只关心 IP 地址,忽略请求方法和路径:

sort-k1,1 access.log|uniq-f1

这里sort -k1,1先按第一个字段(IP)排序,然后uniq -f 1跳过第一个字段进行比较,最终每个 IP 只保留一行。

5. 经典组合:sort | uniq

由于uniq只能处理相邻重复,sort | uniq成为处理文件中所有重复行的标准流程:

  1. sort:将文件所有行排序,使相同内容的行相邻。
  2. uniq:对排序后的相邻重复行进行去重或统计。

这个组合非常高效,常用于日志分析、数据清洗和列表去重。

6. 注意事项与常见误区

  1. 必须理解“相邻”原则:直接对未排序文件使用uniq可能无法去除所有重复。
  2. 空白行处理:空行也被视为一行内容,uniq会对其进行处理。
  3. 字段与字符跳过的区别-f跳过的是由空格/制表符分隔的字段,-s跳过的是字符,无论其是否在字段边界。
  4. 输出重定向:可以使用>>>将结果保存到文件,例如uniq input.txt > output.txt

7. 总结

uniq命令虽然简单,但功能强大且灵活。掌握其与sort的组合使用,可以高效解决许多文本去重和统计问题。记住它的核心是处理相邻重复行,这是正确使用该命令的关键。

http://www.zskr.cn/news/1327775.html

相关文章:

  • Halcon实战:用投影变换搞定倾斜标定板图像校正(附完整代码)
  • 2026淮南装修公司推荐榜:口碑排名前五,选对不踩坑 - 速递信息
  • 2026邛崃市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 手把手教你用Vivado配置Xilinx SEM IP 3.1:从IP Catalog到Tera Term串口调试全流程
  • 杨立昆转推“Meta AI 已死”:一场大厂AI战略的自杀式摇摆
  • 深入YOLOv8损失函数:为什么自带的Focal Loss会报错?一次完整的源码调试与修复记录
  • 从零到部署:在Linux服务器上用Python搭建并调用WPS地理处理服务
  • 2026年淮安婚纱摄影店排行榜:金帝皇后婚纱摄影,综合实力与口碑最优选 - 华Sir1
  • 别再手动写C了!用Simulink S-Function Builder快速封装你的算法(2017a版保姆级教程)
  • 2026年景区智能检票设备制造商深度测评:如何为你的景区匹配最佳方案? - 速递信息
  • ppt模板_0033_圣诞主题2
  • STM32F103C8T6与XL3485芯片实战:手把手教你搞定RS485通信的硬件连接与调试(附完整代码)
  • ppt模板_0034_圣诞主题3
  • 精通Socket.IO重连:深度定制化与复杂场景下的稳定连接之道
  • 告别充电焦虑!用FS4066系列芯片DIY一个支持USB PD快充的2-4串锂电池充电器(附完整电路图)
  • 5分钟免费搭建Sunshine游戏串流:让全家共享游戏乐趣的终极指南
  • 49本紫微斗数电子书合集
  • 别再折腾了!用Anaconda虚拟环境5分钟搞定pyhanlp(Python 3.8 + JPype1 0.7.0)
  • 从‘压高光’到‘提暗部’:深入聊聊手机相机AE里的Histogram Stretch到底在干嘛
  • 避坑指南:OpenCV人脸识别项目整合MySQL时,你可能会遇到的5个数据存储难题
  • 避坑!用ArcGIS计算格网内耕地比例时,90%的人会忽略的数据连接问题
  • 别再混着用了!C++里malloc、new和vector到底该怎么选?一个真实项目踩坑复盘
  • AI Agent的协作竞争机制:多智能体博弈与协调
  • 2026凯里市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 高性能数据可视化:现代思维导图组件的架构设计与实现
  • R3nzSkin深度技术解析:英雄联盟皮肤修改器的架构解密与实战手册
  • 5步掌握Audiveris:免费开源乐谱识别工具让音乐数字化触手可及
  • 推理服务为什么一上自动 Prompt 优化就开始成本失控:从 Prompt 版本爆炸到在线 A/B 收敛的工程实战
  • 苏州婚纱照哪家好?别看广告看这四个硬指标 - eee888
  • DLSS Swapper终极指南:5分钟学会游戏性能智能优化