Linux 10 MB文件的快速二进制差异

Linux 10 MB文件的快速二进制差异,linux,binary,diff,Linux,Binary,Diff,我有两个10 MB的文件,我想找到最长的带有偏移量的公共子序列,例如,结果应该如下所示: 42 bytes at offset 5 of the first file and offset 8 of the second file 85 bytes at offset 100 of the first file and offset 55 of the second file ... 这是一个一次性任务,我只能在一对文件上运行它 我不关心编程语言,但它必须在Linux上运行 我曾尝试过命令行工

我有两个10 MB的文件,我想找到最长的带有偏移量的公共子序列,例如,结果应该如下所示:

42 bytes at offset 5 of the first file and offset 8 of the second file
85 bytes at offset 100 of the first file and offset 55 of the second file
...
这是一个一次性任务,我只能在一对文件上运行它

我不关心编程语言,但它必须在Linux上运行

我曾尝试过命令行工具
bsdiff
xdelta
,但它们的输出diff文件格式太复杂,无法理解,而且缺乏任何文档,因此我必须理解复杂且未记录的C源代码才能获得这些结果。这需要几个小时,而我没有那么多时间来做这件事,所以我放弃了这条路

我尝试过Perl模块字符串::LCSS_XS,但速度太慢(它已经运行了一个小时),Perl模块算法::Diff::XS,但需要太多内存,Perl模块算法::LCSS,但速度太慢(用Perl实现)。我在Python中找不到任何有用的东西(内置的difflib太慢)


是否有一个工具可以快速(即不到几个小时)运行10 MB文件,并且我可以在不到一小时的工作时间内将其输出转换为我想要的格式?

这里有问题吗?既然您找到了可以完成部分工作的工具,请格式化它们的输出。我在问题中提到的工具都不能完成这项工作。我还在找一个好工具。我澄清了问题。您是否需要LCS或“足够好”的差异才是正确的?我所使用的工具ECMerge肯定会生成必要的数据(在Linux上,GUI/CLI和对
System.Console.write
的一些调用都会打印出您需要的数据)。请注意,基于Myers algo的典型LCS位于O(ND)中,这使得它不适用于大文件,但在不同的服务器上。如果您发现一个基于Myers的实现,并使用后缀树或后缀数组进行了修改,那么您可能还可以。这里有问题吗?既然您找到了可以完成部分工作的工具,请格式化它们的输出。我在问题中提到的工具都不能完成这项工作。我还在找一个好工具。我澄清了问题。您是否需要LCS或“足够好”的差异才是正确的?我所使用的工具ECMerge肯定会生成必要的数据(在Linux上,GUI/CLI和对
System.Console.write
的一些调用都会打印出您需要的数据)。请注意,基于Myers algo的典型LCS位于O(ND)中,这使得它不适用于大文件,但在不同的服务器上。如果您发现一个基于Myers的实现,并使用后缀树或后缀数组进行修改,那么您可能就可以了。