news 2026/3/12 13:36:42

Linux 命令:uniq

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 命令:uniq

概述

uniq命令是连续重复行去重/统计的工具,常与sort配合使用(先排序让重复行连续,再去重),核心用于文本去重、统计重复行出现次数,是处理日志、数据清单的高频组合工具,注意:直接对未排序文件使用uniq仅能去除相邻的重复行,无法处理非连续的重复行

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

一、基本语法

uniq[选项][输入文件[输出文件]]
  • 无输入文件时,默认读取标准输入(最常用:配合管道sort 文件名 | uniq);
  • 可指定输出文件,将处理结果写入(替代重定向>);
  • 核心前提:仅处理连续的重复行,非连续重复行不会被识别。

二、核心默认行为

连续重复行去重,仅保留一行,非连续重复行原样输出。
示例:未排序文件test.txt

apple apple banana apple banana banana

直接执行uniq test.txt,输出:

apple banana apple banana

(仅去除了相邻的重复行,非连续的apple/banana仍保留)

三、常用选项(高频且简洁,无冗余选项)

uniq的选项围绕去重、统计、显示重复行设计,所有选项均可组合使用,覆盖99%场景:

选项英文全称作用实用场景示例效果(基于上述test.txt,先sort再uniq)
-c--count统计每行出现的次数,次数在前,内容在后统计日志中重复IP/关键词的出现频次2 apple
3 banana
-d--repeated仅显示连续重复的行(至少出现2次),且仅保留一行筛选出有重复的内容,排除唯一行apple
banana
-D--all-repeated显示所有的连续重复行(保留所有重复实例)查看重复行的全部原始内容apple
apple
banana
banana
banana
-u--unique仅显示唯一的行(从未连续重复的行)筛选出无重复的内容若文件无唯一行则无输出
-f N--skip-fields=N忽略前N列,按剩余内容判断是否重复按指定列去重(如忽略ID列,按内容去重)例:1 apple/2 apple-f1视为重复行
-s N--skip-chars=N忽略前N个字符,按剩余内容判断是否重复按字符位置去重(如忽略前缀,按后缀判断)例:a123/b123-s1视为重复行
-w N--check-chars=N仅比较前N个字符,判断是否重复仅按前N个字符去重/统计例:apple1/apple2-w5视为重复行

四、经典实操示例(分基础/进阶,覆盖所有核心场景)

基础场景:先排序再去重(最常用,必学)

基于上述test.txt,先通过sort让重复行连续,再用uniq处理:

# 1. 基础去重(保留唯一行,去除所有重复行)sorttest.txt|uniq# 输出:apple / banana# 2. 统计重复次数(核心高频)sorttest.txt|uniq-c# 输出:2 apple / 3 banana# 3. 仅显示有重复的行(至少出现2次)sorttest.txt|uniq-d# 输出:apple / banana# 4. 仅显示唯一行(无任何重复)# 新建含唯一行的文件test2.txt:apple/apple/banana/pearsorttest2.txt|uniq-u# 输出:pear
进阶场景1:按指定列/字符去重(-f/-s/-w)

处理结构化文本data.txt(ID 名称 类型,按名称去重,忽略ID列):

1 apple fruit 2 apple fruit 3 banana fruit 4 apple veg 5 orange fruit
# -f1:忽略前1列(ID列),按剩余内容判断重复sortdata.txt|uniq-f1# 输出:# 1 apple fruit# 4 apple veg# 3 banana fruit# 5 orange fruit# -w6:仅比较前6个字符,判断重复(1 apple / 2 apple 前6字符一致)sortdata.txt|uniq-w6 -c# 输出:# 3 1 apple fruit# 1 5 orange fruit
进阶场景2:组合选项(统计+显示所有重复行)
# 显示所有重复行,并统计每行总次数(先统计再筛选,需配合awk)sorttest.txt|uniq-c|awk'$1>1'# 输出:2 apple / 3 banana(等价sort+uniq -d,且带次数)# 显示所有重复的原始行,并写入新文件sorttest.txt|uniq-D>repeat_lines.txt
进阶场景3:与其他命令配合(日志统计实战)

统计Nginx访问日志access.log访问次数最多的前5个IP

# 提取IP列 → 排序 → 统计次数 → 按次数降序 → 取前5grep-o"\b[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\b"access.log|sort|uniq-c|sort-nr|head-5

五、与sort -u的核心区别(易混淆,必分清)

sort -usort | uniq均能实现全局去重,但功能侧重不同,按需选择:

命令组合核心功能额外能力适用场景
sort -u 文件名排序+全局去重,一步完成无统计、筛选功能,仅去重仅需去重,无需统计重复次数
`sort 文件名uniq`排序+全局去重,两步完成可配合-c/-d/-u实现统计/筛选
`sort 文件名uniq -c`排序+去重+统计次数核心统计能力,无替代方案

结论:仅去重用sort -u(更高效);需统计/筛选重复行,必须用sort | uniq 选项

六、关键注意事项

  1. 核心前提uniq仅处理连续重复行,未排序文件直接使用会漏判非连续重复行,所有全局去重/统计场景,必须先sort
  2. 空行处理:空行视为普通行,连续空行会被去重/统计,可先用grep -v "^$"过滤空行;
  3. 空格/制表符:行首/行尾的空格会影响重复判断(如appleapple视为不同行),可先用sed 's/^ *//;s/ *$//'去除首尾空格;
  4. 输出文件:指定输出文件时,输入文件和输出文件不能为同一个文件(否则会清空文件);
  5. 超大文件uniq逐行处理,内存占用极低,可配合sort处理GB级文本文件(如日志、数据文件)。

七、高频组合用法(实战必用,直接复用)

1. 文本全局去重(高效版)
sortfile.txt -u>unique_file.txt
2. 统计重复行次数并按次数降序排列
sortfile.txt|uniq-c|sort-nr
3. 筛选出仅出现一次的唯一行
sortfile.txt|uniq-u
4. 筛选出重复出现的行(至少2次)并统计次数
sortfile.txt|uniq-c|awk'$1 >= 2'
5. 处理结构化文本:按指定列去重并统计
# 按第2列(逗号分隔)去重,统计次数(先按第2列排序,再忽略前1列去重)sort-t","-k2 file.csv|uniq-f1 -c

总结

uniq连续重复行处理工具,核心价值是与sort配合实现全局去重/统计/筛选,日常使用的核心口诀

  • 仅去重:sort -u一步到位;
  • 要统计/筛选:sort | uniq -c/-d/-u组合使用;
  • 结构化文本:sort -t 分隔符 -k 列号 | uniq -f N按列处理。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 22:49:03

使用高版本SpringBoot导致Junit5的NoSuchMethodError的错误

关于作者: 一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚信,真正能让大家看懂的技术文章才是好文章,坚持用通俗易懂的大白话写技术文章,并会持续更新。 一、问…

作者头像 李华
网站建设 2026/3/4 11:45:47

深入理解 Java 虚拟机内存模型

深入理解 Java 虚拟机内存模型(JMM)—— 从底层原理到多线程实战(2026 年视角) Java 内存模型(Java Memory Model,简称 JMM)是 JVM 规范中定义的抽象模型,它屏蔽了底层硬件&#xf…

作者头像 李华
网站建设 2026/3/10 7:00:59

现代嵌入式C++教程——C++一定会使得代码膨胀嘛?

现代嵌入式 C 教程系列 —— “C 一定会导致代码膨胀吗?” 答案是:不一定,甚至在很多情况下不会。 现代 C(C11/14/17/20/23)在嵌入式领域已经可以做到零成本抽象(zero-cost abstractions)或极低…

作者头像 李华
网站建设 2026/3/11 11:42:05

Python 文件读写核心机制与最佳实践

Python 文件读写核心机制与最佳实践 (2025-2026 年视角,兼顾性能、安全、可维护性) Python 的文件操作表面上看很简单(open() 一行搞定),但底层机制、编码处理、缓冲策略、异常场景、并发安全等细节如果没…

作者头像 李华
网站建设 2026/3/11 22:41:47

使用 Wireshark 进行网络嗅探是有效的网络监控和安全分析方法

使用 Wireshark 进行网络嗅探是有效的网络监控和安全分析方法 如何使用 Wireshark 进行网络嗅探区分网络嗅探的合法与非法使用 网络嗅探作为一种强大的网络分析技术,可以帮助用户深入了解网络流量中的数据包细节。Wireshark 作为该领域最流行的工具之一&#xff0…

作者头像 李华