有两个文本文件(file_1和file_2)需要相互比较。这两个文件非常大(每个文件都有3-4GB,从3000万到4500万行)。我的想法是将尽可能多的
file_1
行读入内存中,然后将这些行与file_2
中的所有行进行比较。如果匹配成功,则将匹配的文件行写入新文件。然后继续读取file_1
的下1000行,并将其与file_2
中的所有行进行比较,直到完全遍历file_1
。但是这听起来实际上非常耗时且复杂。
您能否想到任何其他比较这两个文件的方法?
您认为比较需要多长时间?对于我的程序,时间并不是那么重要。我没有处理过如此庞大的文件,因此我不知道这可能需要多长时间。它不应该超过一天。;-) 但我担心我的技术可能需要永远...
另一个刚刚浮现在我脑海中的问题是:你会读取多少行进入内存中?尽可能多吗?是否有一种方法可以在实际尝试之前确定可能的行数?我想读取尽可能多的行(因为我认为这样更快),但我经常内存不足。
谢谢您提前的帮助。
编辑:我认为我需要更详细地解释我的问题。
目的不是查看两个文件是否完全相同(它们不同)。每个文件中都有一些共享相同“特征”的行。下面是一个示例:
file_1
看起来像这样:mat1 1000 2000 TEXT //this means the range is from 1000 - 2000
mat1 2040 2050 TEXT
mat3 10000 10010 TEXT
mat2 20 500 TEXT
file_2
的内容如下:
mat3 10009 TEXT
mat3 200 TEXT
mat1 999 TEXT
TEXT
是一些对我没有兴趣的字符和数字,mat
可以是 mat1 - mat50
中的任意一个,并且没有顺序;此外,可能会有 1000x 的 mat2
(但下一列中的数字不同)。我需要以这样的方式找到适合的行:在比较的两行中,matX
是相同的,并且在 file_1
中提到的数字适合于在 file_2
中提到的范围内。因此,在我的例子中,我将找到一个匹配项:文件1的第3行和文件2的第1行(因为两者都是mat3,且10009介于10000和10010之间)。希望我已经讲清楚了!所以我的问题是:您如何搜索匹配行?
是的,我使用Java作为编程语言。 编辑 现在我首先将巨大的文件分成小文件,这样我就不会遇到内存溢出的问题了。我还认为将(许多)小文件彼此比较比两个巨大的文件彼此比较更快。之后我可以按照上述方法进行比较。这可能不是完美的方法,但我仍在学习;-) 尽管如此,你们所有人的方法对我来说都非常有帮助,谢谢你们的回复!
java
,这是否意味着你只想用Java来完成它? - Igor Zinov'yev