如何高效地做到大文本去除重复行
如果只是去重,用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
如何高效地做到大文本去除重复行相关推荐
- 文本 去除重复行(sublime Text3 ,正则表达式)
文本 去除重复行(sublime Text3 ,正则表达式) 去除重复行的方法很多,这里通过正则表达式实现: 农林牧渔子类 农林牧渔子类 农林牧渔子类 农林牧渔子类 卫生和社会工作子类 卫生和社会工作 ...
- menisa mysql_实例详细说明linux下去除重复行命令uniq
一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...
- python excel处理重复行并统计个数_python统计一个文本中重复行数的方法
python统计一个文本中重复行数的方法 这篇文章主要介绍了python统计一个文本中重复行数的方法,涉及针对Python中dict对象的使用及相关本文的操作,具有一定的借鉴价值,需要的朋友可以参考下 ...
- python统计重复的数_python统计一个文本中重复行数的方法
本文实例讲述了python统计一个文本中重复行数的方法.分享给大家供大家参考.具体实现方法如下: 比如有下面一个文件 2 3 1 2 我们期望得到 2,2 3,1 1,1 解决问题的思路: 出现的文本 ...
- linux排列去重复的命令,实例详细说明linux下去除重复行命令uniq
一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个.使用uniq的时候要注意以下二点 1,对文本操 ...
- python3 文本文件内容去除重复行
环境:python3.8 import shutil# 文件去除重复行 def remove_duplicates(path):lines_seen = set()outfile = open(f&q ...
- shell脚本--awk数组实现去除重复行
去除重复行的方法有很多,这里介绍三种. 测试文本: [root@172-0-10-222 myscripts]# cat testfile andy 123456 hanna 123456 hello ...
- Pandas 模块-操纵数据(8)-去除重复行 .drop_duplicates()
目录 8. 去除重复行 .drop_duplicates() 8.1 .drop_duplicates() 语法 8.1.1 .drop_duplicates() 语法结构 8.1.2 .drop_d ...
- linux shell 文件去除重复行
原始文本文件 $ cat test jason jason jason fffff jason 方法一:sort -u 去除重复后 sort -u test fffff jason 注意顺序被打乱 方 ...
最新文章
- Python实现向s3共享存储上传和下载文件
- 示廓灯——也就是前后位置等开启方法 还有该死的刮水器是长这样的
- 数据可视化怎么完成的_完成期望后会发生什么:可视化育儿数据
- 经典算法系列三----堆排序
- Command 模式 Step by Step
- 频繁使用花呗、借呗、微粒贷、京东白条会影响在银行的信用吗?
- 华为诺亚方舟 | 构建1亿组图文对中文多模态数据集
- 计算机程序设计语言有哪几类,计算机程序设计语言可以分为哪三类?
- 北京1954坐标系3度带和6度带及中央子午线对照表
- 第二章 Python的基本语法【Python二级题库】
- 数字经济的网络黑手,中科信安:勒索软件攻击比去年同期增加7倍
- 2 计算机控制器的组成,组合逻辑控制器组成结构及工作原理解析
- linux服务器怎么做快照,云服务器怎么创建快照
- 关于在word中插入页码以及目录的操作
- java ios 3des_3DES在Android、Ios 和Java 平台的加密解密
- 【干货】数据产品经理如何快速了解业务
- Azure-900【定义云模型】
- 流行 - 十大网络流行语揭晓:第一“做人要厚道”(转)
- 机器人自动化《RPA国内外平台深度对比》
- screw (螺丝钉) 数据库表结构文档生成工具(转发)
热门文章
- IT行业的各岗位职责[转]
- abp mysql .net core_基于abp vNext和.NET Core 开发博客
- 华为AC外置Portal认证方案配置步骤指南
- Mozilla 考虑从 Firefox 剥离 XUL 和 XBL
- 享受科技,抓住先“机”,苏宁手机蜜蜂节各大手机新品在等你
- DE2-115 SDRAM地址问题
- SQL优化(三):子查询和IN,EXISTS用法和优化方法
- LogicFlow 来绘制兼容 BPMN2.0 规范的流程 (React hooks版)
- python 做界面时如何使图片保持透明背景_Python matplotlib生成图片背景透明
- 软件开发过程反思——从需求分析到最后开发出来的软件