对较长的一行文件使用 diff

对较长的一行文件使用 diff

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

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

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

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

有什么建议吗?

答案1

假设有很多空格,就像在普通文本中一样,您可以按单词拆分文件,并将其与普通的 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

答案2

我会找到一个可以进行行内差异的 diff。我使用xxdiff在 UNIX 上。我认为合并在 Windows 上进行行内差异。

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

答案3

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

答案4

我发现git diff--word-diff=porcelain选项对于这样的任务很有帮助,例如给定 2 个文件,其中长行仅相差 1 个字符,可以通过管道传输输出以grep过滤更改的行和更改,然后grep再次通过管道传输以仅显示每行的最后 80 个字符:

echo {1..4000} A {4001..8000} > a.tmp
echo {1..4000} B {4001..8000} > b.tmp

> git diff -U0 --word-diff=porcelain a.tmp b.tmp | grep -A3 '@@' | egrep -o '.{1,80}$'
@@ -1 +1 @@
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
-A
+B

相关内容