Linux命令uniq经典操作示例

作者:

文章目录
  • uniq 命令是对连续重复行去重/统计的工具,常与 sort 配合使用(先排序让重复行连续,再去重),核心用于文本去重、统计重复行出现次数,是处理日志、数据清单的高频组合工具,注意:直接对未排序文件使用 uniq 仅能去除相邻的重复行,无法处理非连续的重复行。 资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://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 apple3 banana -d –repeated 仅显示连续重复的行(至少出现2次),且仅保留一行 筛选出有重复的内容,排除唯一行 applebanana -D –all-repeated 显示所有的连续重复行(保留所有重复实例) 查看重复行的全部原始内容 appleapplebananabananabanana -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视为重复行
  • sort -u 和 sort | uniq 均能实现全局去重,但功能侧重不同,按需选择: 命令组合 核心功能 额外能力 适用场景 sort -u 文件名 排序+全局去重,一步完成 无统计、筛选功能,仅去重 仅需去重,无需统计重复次数 `sort 文件名 uniq` 排序+全局去重,两步完成 可配合-c/-d/-u实现统计/筛选 `sort 文件名 uniq -c` 排序+去重+统计次数 核心统计能力,无替代方案 结论:仅去重用 sort -u(更高效);需统计/筛选重复行,必须用 sort | uniq 选项。
  • 核心前提:uniq 仅处理连续重复行,未排序文件直接使用会漏判非连续重复行,所有全局去重/统计场景,必须先sort; 空行处理:空行视为普通行,连续空行会被去重/统计,可先用grep -v "^$"过滤空行; 空格/制表符:行首/行尾的空格会影响重复判断(如apple和 apple视为不同行),可先用sed 's/^ *//;s/ *$//'去除首尾空格; 输出文件:指定输出文件时,输入文件和输出文件不能为同一个文件(否则会清空文件); 超大文件:uniq 逐行处理,内存占用极低,可配合sort处理GB级文本文件(如日志、数据文件)。
  • uniq 是连续重复行处理工具,核心价值是与sort配合实现全局去重/统计/筛选,日常使用的核心口诀: 仅去重:sort -u 一步到位; 要统计/筛选:sort | uniq -c/-d/-u 组合使用; 结构化文本:sort -t 分隔符 -k 列号 | uniq -f N 按列处理。 到此这篇关于Linux 命令uniq经典操作示例的文章就介绍到这了,更多相关Linux 命令uniq内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Linux命令 sort、uniq、tr工具详解
  • 目录
    • 概述
    • 一、基本语法
    • 二、核心默认行为
    • 三、常用选项(高频且简洁,无冗余选项)
    • 四、经典实操示例(分基础/进阶,覆盖所有核心场景)
      • 基础场景:先排序再去重(最常用,必学)
      • 进阶场景1:按指定列/字符去重(-f/-s/-w)
      • 进阶场景2:组合选项(统计+显示所有重复行)
      • 进阶场景3:与其他命令配合(日志统计实战)
    • 五、与sort -u的核心区别(易混淆,必分清)
      • 六、关键注意事项
        • 七、高频组合用法(实战必用,直接复用)
          • 1. 文本全局去重(高效版)
          • 2. 统计重复行次数并按次数降序排列
          • 3. 筛选出仅出现一次的唯一行
          • 4. 筛选出重复出现的行(至少2次)并统计次数
          • 5. 处理结构化文本:按指定列去重并统计
        • 总结

          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. 基础去重(保留唯一行,去除所有重复行)
          sort test.txt | uniq
          # 输出:apple / banana
          # 2. 统计重复次数(核心高频)
          sort test.txt | uniq -c
          # 输出:2 apple / 3 banana
          # 3. 仅显示有重复的行(至少出现2次)
          sort test.txt | uniq -d
          # 输出:apple / banana
          # 4. 仅显示唯一行(无任何重复)
          # 新建含唯一行的文件test2.txt:apple/apple/banana/pear
          sort test2.txt | uniq -u
          # 输出:pear

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

          1 apple fruit
          2 apple fruit
          3 banana fruit
          4 apple veg
          5 orange fruit
          
          # -f1:忽略前1列(ID列),按剩余内容判断重复
          sort data.txt | uniq -f1
          # 输出:
          # 1 apple fruit
          # 4 apple veg
          # 3 banana fruit
          # 5 orange fruit
          # -w6:仅比较前6个字符,判断重复(1 apple / 2 apple 前6字符一致)
          sort data.txt | uniq -w6 -c
          # 输出:
          # 3 1 apple fruit
          # 1 5 orange fruit

          # 显示所有重复行,并统计每行总次数(先统计再筛选,需配合awk)
          sort test.txt | uniq -c | awk '$1>1'
          # 输出:2 apple / 3 banana(等价sort+uniq -d,且带次数)
          # 显示所有重复的原始行,并写入新文件
          sort test.txt | uniq -D > repeat_lines.txt

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

          # 提取IP列 → 排序 → 统计次数 → 按次数降序 → 取前5
          grep -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 -usort | uniq 均能实现全局去重,但功能侧重不同,按需选择:

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

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

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

          sort file.txt -u > unique_file.txt

          sort file.txt | uniq -c | sort -nr

          sort file.txt | uniq -u

          sort file.txt | uniq -c | awk '$1 >= 2'

          # 按第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 按列处理。

          到此这篇关于Linux 命令uniq经典操作示例的文章就介绍到这了,更多相关Linux 命令uniq内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

          您可能感兴趣的文章:

          • Linux命令 sort、uniq、tr工具详解

          站内搜索