比较二进制文件并仅打印匹配行的偏移量

5

对于常规文件,我可以使用comm命令查找共同的行。

例如,我们有两个文件:

$ cat f1
line1
line2
line3
line4
line5

$ cat f2
line1
line20
line30
line4
line5

它被比作:

$ comm -12 f1 f2
line1
line4
line5

如何找到匹配行的偏移量,以及如何比较两个二进制文件并打印匹配行的偏移量?

我已经使用像diffcmpcomm这样的工具一个小时了,但无法解决这个问题。

编辑1:虽然不是完美的解决方案,但找到了vbindiff,它有所帮助。


4
如果这是一个二进制文件,它就没有行。 - ganbustein
好的,对的,但是如何找出这些文件中第一个共同80个字符的偏移量呢? - webminal.org
2
我理解你的问题,但不明白你的困难所在。你真正想要达到什么目标?你想要解决哪个问题? - Klaus
我有两个二进制转储文件(未知格式)。假设file1的内容为“abcde”,file2的内容为“defgh”。我需要找出一种方法通过删除公共模式来合并这两个文件。在这种情况下,它是“de”。输出将是“abcdefgh”。 - webminal.org
1个回答

9
你可能正在寻找cmp命令:

cmp命令 - 逐字节比较两个文件

$ cmp f1 f2
f1 f2 differ: byte 12, line 2

$ cmp -b f1 f2
f1 f2 differ: byte 12, line 2 is  12 ^J  60 0

$ cmp -bl f1 f2
12  12 ^J    60 0
13 154 l     12 ^J
14 151 i    154 l
15 156 n    151 i
16 145 e    156 n
17  63 3    145 e
18  12 ^J    63 3
19 154 l     60 0
20 151 i     12 ^J
21 156 n    154 l
22 145 e    151 i
23  64 4    156 n
24  12 ^J   145 e
25 154 l     64 4
26 151 i     12 ^J
27 156 n    154 l
28 145 e    151 i
29  65 5    156 n
30  12 ^J   145 e
cmp: EOF on f1

man cmp 中得知:

-b,--print-bytes

打印不同的字节

-l,--verbose

输出字节编号和不同的字节值


谢谢。cmp命令有选项打印匹配的行/字节偏移吗?而不是告诉有哪些字节不同。 - webminal.org
1
由于它们被视为二进制,因此不存在行的概念。我不太确定您希望输出的样子是什么样的,您能否澄清一下? - fedorqui
我想找出它们具有共同模式的偏移量。例如:cmp f1 f2 f1 f2 在字节120,第12行相同。感谢您的帮助,对于我的情况,我找到了“vbindiff”。 - webminal.org
我坚持认为:二进制文件中不存在所谓的“行”。正如您所看到的,cmp 显示了一条消息,例如“f1 f2 differ: byte 12, line 2 is 12 ^J 60 0”。 - fedorqui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接