如何识别内容相同但数据排列不同的文件

How To Identify Files with Identical Content But a Different Arrangement of the Data

我正在测试我们 运行 在处理数据的应用程序上的升级。我之前通过系统获取了已经 运行 的存档数据,并将其与新升级的应用程序的输出进行比较。我注意到数据是相同的,但新输出中数据的 ar运行gement 不同。例如,在新文件中,第 57 行的数据曾经位于旧输出中的第 43 行。有没有办法检测文件包含相同的内容?当我 运行 在 TextPad 中比较文件或进行 MD5 哈希比较时,它没有检测到文件具有相同的内容。它将它们视为不同的文件。

哈希比较没有意义。因为例如

的两个文件
foo
bar

bar
foo

会生成一个完全不同的散列。否则哈希函数真的会被破坏。

我认为你在这里唯一的机会是查看文件 A 中的每一行是否都在文件 B 中(逐行)。也许你可以实现一个排序算法。这可以在两个文件上同时完成,然后您可以比较这两个文件的哈希值,因为排序算法在其输出中是确定性的。

正如 Enak 和 Dominique 所提到的,逐行对文本文件进行排序,然后比较两者将完全确定是否缺少任何内容。

您可能会计算两个文件的一些聚合值,然后比较它们以获得足够的证据,这样会快很多。字数和字数一样吗?不同字母的数量怎么样?计算两个文件中的所有 26 个字母(您也可以对您选择的任何字符集执行相同的操作),如果它们的数字完全匹配,则两个文件包含相同信息的可能性非常高。这与您的散列方法在同一行,但显然不那么可靠。

如果您需要确切地知道,您将不得不以某种方式将文件 A 的每一行与文件 B 的每一行进行比较。如果行完全打乱,将文件 A 和 B 中的行排序然后比较文件将是最佳选择。但是,如果存在局部性(文件 A 的行号 x 倾向于停留在文件 B 中的位置 x 附近),您不妨只比较两个文件而不进行排序,而是开始搜索文件 A 的行号 x 周围的位置 x在文件 B.