我有一个关于你对我的“技术”的看法的一般性问题。
有 2 个文本文件(file_1
and file_2
)需要相互比较。两者都非常巨大(3-4 GB,每个从 30,000,000 到 45,000,000 行)。
我的想法是阅读几行(尽可能多)file_1
到内存,然后将它们与all的行file_2
。如果存在匹配,则两个文件中匹配的行应写入新文件。然后继续接下来的 1000 行file_1
并将它们与all的行file_2
直到我经历了file_1
完全地。
但这对我来说实际上听起来非常非常耗时且复杂。
您能想到其他方法来比较这两个文件吗?
您认为比较需要多长时间?
对于我的程序来说,时间并不那么重要。我没有处理如此大文件的经验,因此我不知道这可能需要多长时间。不过,应该不会超过一天。 ;-) 但我担心我的技术可能会永远持续下去......
我刚刚想到的另一个问题是:你会读入内存多少行?越多越好?有没有办法在实际尝试之前确定可能的行数?
我想尽可能多地阅读(因为我认为这样更快),但我经常内存不足。
提前致谢。
EDIT我想我必须多解释一下我的问题。
目的不是要查看这两个文件总体上是否相同(它们不是)。
每个文件中都有一些行具有相同的“特征”。
这是一个例子: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
并且没有顺序;也可以有1000xmat2
(但下一列中的数字不同)。我需要以这样的方式找到拟合线: matX 在两条比较线和中提到的数字相同file_2
符合中提到的范围file_1
。
所以在我的例子中我会找到一个匹配项:第 3 行file_1
和第 1 行file_2
(因为都是mat3并且10009在10000到10010之间)。
我希望这能让你清楚!
所以我的问题是:你将如何搜索匹配的行?
是的,我使用 Java 作为我的编程语言。
EDIT我现在先划分大文件,这样就不会出现内存不足的问题。我还认为比较(许多)较小的文件比这两个大文件更快。之后我可以按照我上面提到的方式比较它们。这可能不是完美的方法,但我仍在学习;-)
尽管如此,您的所有方法对我都非常有帮助,谢谢您的回复!