-
关于比较两个超大文件的差异,有什么好的思路30
有两个文件A和B,分别保存了一个系统两天的数据快照。
a.txt
(格式为:号码,姓名,年龄,姓别,状态)
13900001111,小A,20,男,01
13900001112,小H,20,女,06
13900001113,小C,20,男,06
13900001114,小D,20,男,04
13900001116,小E,20,女,04
13900001118,小F,20,男,04
13900001119,小G,20,女,07
b.txt
(格式和a一样:号码,姓名,年龄,姓别,状态)
13900001111,小A,20,男,01
13900001113,小C,20,男,06
13900001114,小D,20,男,04
13900001116,小E,20,女,04
13900001118,小F,20,男,04
13900001119,小G,20,女,01
13900001120,小K,23,女,01
b文件比a多了一个“小K”,但是少了一个“小H”,另外“小G”的状态被改为“01”,两个文件的号码都是唯一标识。
我想达到的目的是
1、想快速的在B文件中找出对比A少的记录和多出来的记录。
2、找出B文件中状态被修改的记录
例子里面的数据量比较少,实际上a文件和b文件都在4-5千万的数量级别。
问题补充:强调这两个文件加起来的数据有上亿条,估计导入到数据库都要很长时间。
现在的限制最多在2个小时以内完成对比,并输出相关的结果。
问题补充:huzhenyu 写道其实这玩意并不是特定的方式去处理,首先你得确定你id是否就是按顺序排列的,如果无序的你会搞到死.如果有序其它很好办怎么玩怎么有,用BufferInputStrem读进来一个一个比都完全可以.
是无序排列的。如果有序的话,也没这么多问题了。
问题补充:mobilezht 写道cat file1 file2 | sort |uique -c |grep -v ^2
合并文件,排序,计数,将只出现一次的记录行 列出来
(排除一样的记录行)
相信操作系统自带的这些工具比你现写程序的效率要高很多。尤其是不需要反复调试
确认一下是
cat a.txt b.txt | sort | unique -c | grep -v ^2
我运行了一下,说unique是无效命令?
我的cat版本是5.932011年4月15日 11:03
23个答案 按时间排序 按投票排序
-
以下是针对有oracle环境的处理方式
1.用java程序把不必要的字段过滤掉,只保留主键,状态两个字段的数据,
同时把一个大的文件才分成10份。
这时候 a.txt,变成了 a1.txt,a2.txt,a3.txt..........a10.txt
2. 在oracle中建立一个a表
3. 新建4个控制文件平分了数据文件a1.txt,a2.txt,a3.txt..........a10.txt 的数据,
在oracle sqlldr 加入 errors=10000 direct=y parallel=true 参数,启动并行导入模式
4. 用sql对比
2011年4月28日 15:52
-
#只在$1中有的行 awk '{if(ARGIND==1) {v[$0]}else{if($0 in v) delete v[$0]}}END{for(i in v) print i}' $1 $2 #同时在$1和$2中的行 awk '{if(ARGIND==1) {v[$0]}else{if($0 in v) print $0}}' $1 $2
2011年4月27日 00:39
-
估算了一下,你一个文件上亿条记录,假如有2一条记录,文件大小应该在20G左右。根据个人经验,超过200万条不考虑使用Map,jvm使用heap就大概有300M,我们这里工作的同事一部分喜欢使用内存数据库,一部分牛人使用NIO自己设计存储排序方案。
给点提示:使用NIO,并行计算jrs166。2011年4月26日 17:48
-
这么大的文件比较,想起来就头疼。能不能从业务的角度优化一下,把大文件拆小。
实在要比,有个比较偷懒的办法,就是用数据库。把数据插进数据库,SQL语句就可以处理了。上亿的文件如果都读进内存,再加上其他的业务数据,服务器容易宕机。
内存比较其实我想到个中性办法:把数据按照id逐条灌入memcached,借用memcached缓存的功能做逐条比较。
这种头疼的任务,最好能够避免。2011年4月25日 19:23
-
cat file1 file2 | sort |uique -c |grep -v ^2
合并文件,排序,计数,将只出现一次的记录行 列出来
(排除一样的记录行)
相信操作系统自带的这些工具比你现写程序的效率要高很多。尤其是不需要反复调试2011年4月25日 13:31
-
将两个文件读入缓存,用map分别存储为mapA和mapB,
迭代mapA,然后利用mapB.containsKey(mapA_key)判断即可。
如果mapB中有的,mapA中没有,貌似上述方法判断不出来。2011年4月21日 17:49
-
2小时的时间足够了的,基本还是要看内存能用多少,如果可以,把a.txt读进去,以id为key,整个record string为value建立hashmap。然后读取b。txt,每读一行就去a。txt的hashmap看看id是否存在,然后根据情况比较久可以。
每个文件估计1.5g左右,就算安10M/s也只要150秒,其实跑起来半个小时应该就可以。算法的负责度估计是O(n*log(n)),不会慢的。
如果内存不够的话,就要对a.txt里的record做index处理,比较的时候使用index去定位文件来读取对应的record,不过也只是相当于把a。txt读两次,但需要内存可以减少1/2以上,具体要看每行record的长度。这样处理的话时间也不会超过一小时。2011年4月20日 10:26
-
可以自己百度上面找----比较文件差异工具
我帮忙找了几个:
http://www.oschina.net/p/diffuse/similar_projects
http://www.iplaysoft.com/winmerge.html
http://www.lupaworld.com/proj-cont-id-1190-bpage-2.html
上面三个没有你适合用的话,你就自己找找。。。2011年4月16日 16:17
-
这么大的文件早就应该放到数据库里,让数据库管理,到不是不能写,但写成的,没问题几乎你是办不到的就好象为什么一个ORACLE做了这么多年才做成现在的样子
2011年4月16日 09:09
-
其实这玩意并不是特定的方式去处理,首先你得确定你id是否就是按顺序排列的,如果无序的你会搞到死.如果有序其它很好办怎么玩怎么有,用BufferInputStrem读进来一个一个比都完全可以.
2011年4月15日 14:06
-
将两个文件读入缓存,用map分别存储为mapA和mapB,
迭代mapA,然后利用mapB.containsKey(mapA_key)判断即可。2011年4月15日 11:09
相关推荐
5. **文件哈希值**:在比较文件内容时,常常利用文件的哈希值,如MD5或SHA系列,来快速判断两个文件是否相同。如果两个文件的哈希值一致,通常意味着它们的内容完全一样。若不同,则表示内容有差异。 6. **版本控制...
当涉及到数据处理和分析时,比对两个文件之间的差异是一项常见的任务。本篇将详细介绍如何使用Java来实现两个Excel(或CSV)文件的比对,以特定列作为键值,并比较指定列的差异。 首先,我们需要导入相关的库。由于...
文件比较算法是计算机科学中的一种常见算法,用于比较两个文本文件的相似度和差异。在这篇文章中,我们将对文件比较算法进行剖析,并详细介绍其实现原理和算法思路。 文件比较算法的主要思路是,通过比较两个文本...
它的两个参数`imagePath1`和`imagePath2`分别代表待比较的两张图片的路径。由于提到可以支持中文路径,这意味着在处理文件路径时,已经考虑到了中文字符的编码问题,这通常涉及到Java中的`URLEncoder`或`Charset`类...
图片差异对比的基本思路是逐像素地比较两张图片,找出它们之间的差异。在C#中,我们可以使用Bitmap的LockBits方法来获取图像的原始像素数据,然后通过遍历每个像素并比较RGB值来实现。这种方法比直接使用GetPixel...
1. 文件比较工具(bijiao):在计算机中,文件比较工具如Beyond Compare或WinMerge可以帮助用户找出两个或多个文件之间的差异。这些工具可以用于代码审查、文档同步,甚至对比文本文件或图像文件的内容。通过对比,...
文件对比的核心是比对两个文件中的字符序列或字节序列的相似性。在文本文件中,我们通常关心的是文本内容的相似程度,而对于Word文档,我们需要先将其内容提取为纯文本,然后再进行对比。 以下是一个简化的步骤概述...
一种常见的是使用版本控制工具,如Git,来比较两个版本之间的差异,并生成包含这些差异的文件集合。另一种方法是利用Java自身的归档工具,如jar命令,配合某些第三方库,如Apache Ant或Maven,来实现差异包的构建。...
例如,Visual Studio IDE内置了文件比较功能,可以方便地对比两个文件的差异。除此之外,还有一些专门的代码比较工具,如Beyond Compare、WinMerge等,它们提供直观的界面,高亮显示差异,并支持合并冲突等功能。...
- **bool()**:比较两个日期是否完全相同。 - **ZongTian()**:计算日期到公元0年1月1日的总天数。这是通过遍历从公元0年到当前日期每一年的天数来实现的,其中考虑了闰年的情况。 - **increaseDay()** 和 **...
在这个C++项目中,用户可以添加并比较两个文件,计算它们的相似度。这可能涉及到读取文件内容,将代码转换为一种可比较的形式(如去除空格、注释和换行符),然后应用特定的相似度算法。常见的算法有Jaccard相似度、...
4. `diff -u file1 file2` 比较两个文件的差异。 5. `md5sum filename` 计算文件的MD5哈希值,用于验证文件未被篡改。 五、程序调试与总结 在开发过程中,使用GDB等调试工具对程序进行调试,检查代码逻辑、内存...
Socket tcp服务器端通信源码,C#编写,服务器端部分,这是从一个商业级的物联网项目分离出来的核心代码,让你绕过最难写的Socket管理,内置两个Socket,有两个数据缓冲队列,,仅一个静态类文件,调用时一个激活语句...
增量升级的基本思路是对比新旧两个版本的应用程序,找出差异部分并生成补丁文件。这里,我们引入了`bsdiff`工具,它是用来生成二进制文件差异的算法,bsdiff4.3-win32.zip就是这个工具的Windows版本。在Android增量...
代码差异对比,也称为代码 diff,是找出两个文本文件或代码版本之间不同之处的过程。这对于协同开发、代码审查和版本控制至关重要。TextDiff就是专为此目的设计的,它能够精准地识别出文本或代码文件中的添加、删除...
在操作系统课程设计中,构建一个文件管理系统是一项重要的实践任务,有助于深入理解操作系统的工作原理和设计思想。以下是对这个主题的详细阐述: 1. 文件系统概述:文件系统是操作系统用于组织、管理和存储数据的...
首先,我们看到两个文件mymmapw.cpp和mymmapw.h,它们是针对Windows系统的。Windows中的文件映射功能主要由`CreateFileMapping`和`MapViewOfFile`函数实现。`mymmapw.cpp`可能包含了这些API的封装,以提供友好的C++...
在使用时,只需提供待比较的两个文件,diffmerge会以颜色编码的方式显示它们的差异,使得用户能迅速定位到变化的部分。 其次,diffmerge还支持目录比较。当需要对比整个项目或目录的差异时,它可以逐个文件进行对比...
这个压缩包文件包含了两个不同的版本,这通常意味着提供了两种不同的解题思路或解决方案,为学习者提供了更全面的理解角度。 固态硬盘(SSD)是一种存储设备,它使用非易失性闪存来存储数据,与传统的机械硬盘(HDD...
Socket服务器和客户端通信源码,C#编写,这是从 一个商业级的物联网项目分离出来的核心代码,让你绕过最难写的Socket管理,服务器内置两个Socket,支持多连接,有两个数据缓冲队列,,仅一个静态类文件,调用即可...