在一个长的单行文件上使用 diff

jpe*_*lli 32 linux diff

我有一个只有一行的文件。它的大小约为 20,000 字节。

文件已被修改,我想知道在哪里。

我想使用 diff,但它向我显示了完整的行,因为它输出了有差异的行 - 但在这种情况下,它是文件中唯一有差异的行。

所以我想看看有什么区别。

有什么建议吗?

Phi*_*ßen 15

假设有很多空格,就像普通文本一样,可以按单词拆分文件,用普通的diff工具对比一下,比如meld:

tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split
Run Code Online (Sandbox Code Playgroud)

  • 对我来说似乎是最直接的解决方案。diff 问题本身是微不足道的,但是大多数工具(不仅仅是 diff 工具)无法管理长行,因此问题在于处理长行,而不是 diff 本身。 (2认同)

Ric*_*lka 5

我会找到一个做线内差异的差异。我在 UNIX 上使用xxdiff。我认为WinMerge在 Windows 上做线内差异。

其他答案也很好:wdiff,或分成块 - 如果数据是由管道或逗号分隔的,则块边界更容易定义。

  • 仅供参考,如果行长度超过 32768 个字符,则 xxdiff [segfaults](https://bitbucket.org/blais/xxdiff/issues/3/segfault-on-large-binary-files)... (2认同)

Nic*_*ton 4

如果这是一个一次性问题,我会创建文件的副本,\n每 50 个字符插入一个字符,然后比较这些副本。(我选择 50 是因为它使数学从原始文件中的不同行号到字节偏移变得容易,但可能会根据我的发现向上/向下调整。)