如果只是去重,用sort的效率很低(指的是上千万行的量级),因为做了额外操作,因为你只是要去重,而不是排序

用awk数组来实现很简单很快,利用了awk数组是hashtable实现的特性。内存占用和去重后(注意是去重后)的行数(注意是行数,而不是你的文本内容)成正比。

cat 一堆文件 | awk '{ if (!seen[$0]++) { print $0; } }'

来个实际的测试结果吧,取100w 不重复的URL,简单复制一份,形成一个200w行的文件(请原谅我不能拿几亿的数量做测试,因为sort实在太慢了,上面说可以接受的肯定是没有测试过。。)

$ wc -l 200w
2000000 200w
$ tail -1 200w
http://photo.blog.sina.com.cn/photo/511c583f448cc39a9cb5c

$ time cat 200w | sort | uniq > sort_uniq
cat 200w 0.01s user 0.08s system 0% cpu 21.844 total
sort 35.13s user 0.24s system 76% cpu 46.279 total
uniq > sort_uniq 21.43s user 0.17s system 46% cpu 46.278 total

sort && uniq 耗时 46s,并且会打满一个CPU核

$ time cat 200w | sort -u > sort_u
cat 200w 0.01s user 0.08s system 0% cpu 24.806 total
sort -u > sort_u 47.56s user 0.31s system 99% cpu 48.002 total

** sort -u 耗时48s,差不多吧 **

$ time cat 200w | awk '{ if (!seen[$0]++) { print $0; } }' > awk
cat 200w 0.01s user 0.08s system 3% cpu 3.144 total
awk '{ if (!seen[$0]++) { print $0; } }' > awk 2.83s user 0.23s system 96% cpu 3.158 total

awk 方法耗时3s , 而且最重要的awk方法的时间复杂度是O(n), sort是O(nlogn),200w就差这么大,2000w呢,2亿么,可想而知
转自:http://segmentfault.com/q/1010000000445384

如何高效地做到大文本去除重复行相关推荐

  1. 文本 去除重复行(sublime Text3 ,正则表达式)

    文本 去除重复行(sublime Text3 ,正则表达式) 去除重复行的方法很多,这里通过正则表达式实现: 农林牧渔子类 农林牧渔子类 农林牧渔子类 农林牧渔子类 卫生和社会工作子类 卫生和社会工作 ...

  2. menisa mysql_实例详细说明linux下去除重复行命令uniq

    一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...

  3. python excel处理重复行并统计个数_python统计一个文本中重复行数的方法

    python统计一个文本中重复行数的方法 这篇文章主要介绍了python统计一个文本中重复行数的方法,涉及针对Python中dict对象的使用及相关本文的操作,具有一定的借鉴价值,需要的朋友可以参考下 ...

  4. python统计重复的数_python统计一个文本中重复行数的方法

    本文实例讲述了python统计一个文本中重复行数的方法.分享给大家供大家参考.具体实现方法如下: 比如有下面一个文件 2 3 1 2 我们期望得到 2,2 3,1 1,1 解决问题的思路: 出现的文本 ...

  5. linux排列去重复的命令,实例详细说明linux下去除重复行命令uniq

    一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...

  6. python3 文本文件内容去除重复行

    环境:python3.8 import shutil# 文件去除重复行 def remove_duplicates(path):lines_seen = set()outfile = open(f&q ...

  7. shell脚本--awk数组实现去除重复行

    去除重复行的方法有很多,这里介绍三种. 测试文本: [root@172-0-10-222 myscripts]# cat testfile andy 123456 hanna 123456 hello ...

  8. Pandas 模块-操纵数据(8)-去除重复行 .drop_duplicates()

    目录 8. 去除重复行 .drop_duplicates() 8.1 .drop_duplicates() 语法 8.1.1 .drop_duplicates() 语法结构 8.1.2 .drop_d ...

  9. linux shell 文件去除重复行

    原始文本文件 $ cat test jason jason jason fffff jason 方法一:sort -u 去除重复后 sort -u test fffff jason 注意顺序被打乱 方 ...

最新文章

  1. Python实现向s3共享存储上传和下载文件
  2. 示廓灯——也就是前后位置等开启方法 还有该死的刮水器是长这样的
  3. 数据可视化怎么完成的_完成期望后会发生什么:可视化育儿数据
  4. 经典算法系列三----堆排序
  5. Command 模式 Step by Step
  6. 频繁使用花呗、借呗、微粒贷、京东白条会影响在银行的信用吗?
  7. 华为诺亚方舟 | 构建1亿组图文对中文多模态数据集
  8. 计算机程序设计语言有哪几类,计算机程序设计语言可以分为哪三类?
  9. 北京1954坐标系3度带和6度带及中央子午线对照表
  10. 第二章 Python的基本语法【Python二级题库】
  11. 数字经济的网络黑手,中科信安:勒索软件攻击比去年同期增加7倍
  12. 2 计算机控制器的组成,组合逻辑控制器组成结构及工作原理解析
  13. linux服务器怎么做快照,云服务器怎么创建快照
  14. 关于在word中插入页码以及目录的操作
  15. java ios 3des_3DES在Android、Ios 和Java 平台的加密解密
  16. 【干货】数据产品经理如何快速了解业务
  17. Azure-900【定义云模型】
  18. 流行 - 十大网络流行语揭晓:第一“做人要厚道”(转)
  19. 机器人自动化《RPA国内外平台深度对比》
  20. screw (螺丝钉) 数据库表结构文档生成工具(转发)

热门文章

  1. IT行业的各岗位职责[转]
  2. abp mysql .net core_基于abp vNext和.NET Core 开发博客
  3. 华为AC外置Portal认证方案配置步骤指南
  4. Mozilla 考虑从 Firefox 剥离 XUL 和 XBL
  5. 享受科技,抓住先“机”,苏宁手机蜜蜂节各大手机新品在等你
  6. DE2-115 SDRAM地址问题
  7. SQL优化(三):子查询和IN,EXISTS用法和优化方法
  8. LogicFlow 来绘制兼容 BPMN2.0 规范的流程 (React hooks版)
  9. python 做界面时如何使图片保持透明背景_Python matplotlib生成图片背景透明
  10. 软件开发过程反思——从需求分析到最后开发出来的软件