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

Linux从入门到荒废-查找文件中重复的数据

在 Linux 中,可以通过多种命令和组合快速找出文件中的重复数据。以下是几种常用方法,按场景分类:


1. 直接显示重复的行(无需统计次数)

方法 1:sort + uniq
sort filename | uniq -d
  • 作用:输出文件中所有重复的行(每行至少出现两次)。
  • 解析
    • sort:将文件内容排序,使相同行相邻。
    • uniq -d:仅输出重复的行。
方法 2:awk(不依赖排序)
awk 'seen[$0]++ == 1' filename
  • 作用:直接输出重复行,不要求文件预先排序。
  • 解析
    • seen[$0]++:用哈希表记录每行出现的次数,当某行第二次出现时(==1),触发输出。

2. 显示重复行及其重复次数

方法 1:统计所有行的重复次数
sort filename | uniq -c
  • 输出示例
     3 apple2 banana1 orange
    
  • 解析
    • uniq -c:显示每行出现的次数。
    • 结合 sort 后,重复行会被相邻分组。
方法 2:仅显示重复行及其次数
sort filename | uniq -cd
  • 输出示例
     3 apple2 banana
    
  • 解析
    • uniq -cd:仅输出重复次数大于等于 2 的行。
方法 3:使用 awk 输出重复次数
awk '{count[$0]++} END {for (line in count) if (count[line]>1) print count[line], line}' filename
  • 输出示例
    3 apple
    2 banana
    
  • 解析
    • count[$0]++:记录每行的出现次数。
    • END 块:遍历所有行,输出重复次数和对应的行。

3. 处理大文件(高效内存优化)

方法 1:分割文件后处理
split -l 1000000 largefile.txt chunk_  # 将大文件分割为小文件
for file in chunk_*; dosort "$file" | uniq -d >> duplicates.txt
done
  • 适用场景:文件极大,单次处理内存不足。
方法 2:使用 mawk(更快的 awk 实现)
mawk '{count[$0]++} END {for (line in count) if (count[line]>1) print line}' largefile.txt
  • 优势mawk 速度比 GNU awk 更快,适合处理大文件。

4. 扩展需求

忽略大小写
sort -f filename | uniq -id  # -f 忽略大小写排序,-i 忽略大小写比较
仅显示重复行的首次出现位置
awk '!seen[$0]++ && seen[$0]>1' filename
删除重复行,保留唯一值
sort -u filename > unique.txt  # 直接去重

总结

场景命令
快速显示重复行`sort file
显示重复行及次数`sort file
不排序直接找重复行awk 'seen[$0]++ == 1' file
大文件处理split + 分块处理,或使用 mawk
忽略大小写`sort -f file

根据实际需求选择方法,多数场景下 sort | uniq -d 已足够高效!

http://www.xdnf.cn/news/1279.html

相关文章:

  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • AI大模型:(二)2.3 预训练自己的模型
  • 管理+技术”双轮驱动工业企业能源绿色转型
  • 人工智能赋能医疗影像诊断:开启精准医疗新时代
  • Java 中 == 和 equals() 的区别
  • Pytorch实用教程(一):torch.compile计算提速
  • Linux内核之文件驱动随笔
  • 【Git】fork 和 branch 的区别
  • 狄拉克梳状函数的傅里叶变换
  • 联易融与中交第一航务工程局深化合作交流,共探创新发展新路径
  • 模型 替罪羊效应
  • react组件之间如何使用接收到的className(封装一个按钮案例)
  • Python 之 pyecharts 使用
  • 数字化赋能医药未来:柏强制药的战略布局与成果汇报
  • Linux系统编程 day9 SIGCHLD and 线程
  • L1-7、Prompt 的“调试技巧”
  • FPGA设计 时空变换
  • 【springsecurity oauth2授权中心】jwt令牌更换成自省令牌 OpaqueToken P4
  • 西门子PLC S7-1200按钮控制灯实例
  • day4-小白学习JAVA---开发软件_Scanner键盘录入_Random随机数_流程控制语句
  • 基于龙芯 2K1000处理器和复旦微 FPGA K7 的全国产RapidIO 解决方案研究
  • 【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
  • ProxySQL性能调优案例
  • 星光璀璨,跨界共鸣——李炳辰亮相 第十五届北影节嘉年华“音乐之旅”
  • [Java · 铢积寸累] 可变参数
  • Win10 关闭自动更新、关闭自动更新并重启
  • 实践项目开发-hbmV4V20250407-跨平台开发框架深度解析与VSCode一站式开发实践
  • 重装系统后的自用包
  • MulanPSL-1.0开源协议
  • PaddlePaddle线性回归详解:从模型定义到加载,掌握深度学习基础