在長的一行文件上使用 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

我會找到一個進行行內差異的差異。我用差異在 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

相關內容