Использование diff для длинного однострочного файла


25

У меня есть файл, который имеет только одну строку. Его размер составляет около 20 000 байтов.

Файл был изменен, и я хотел знать, где.

Я подумал об использовании diff, но он показывает мне полную строку, потому что она выводит строку, которая имеет разницу - но в этом случае это единственная строка в файле, которая имеет различия.

Поэтому я хотел увидеть, в чем разница.

Любой совет?


3
Различаются слово за словом? manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH

2
Если бы вы попытались передать его в fmt (если вы, конечно, используете linux), вы можете выполнить «fmt -w 50 long.txt | diff»
l1zard

Ответы:


13

Предполагая, что пробелов много, как в обычном тексте, вы можете разбить файл по словам и сравнить его с обычным инструментом сравнения, например, 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 тривиальна, однако большинство инструментов (не только diff-tools) не могут управлять длинными строками, поэтому проблема скорее связана с длинными / длинными строками, а не с самим diffing.
p1100i

4

Я нашел бы diff, который делает внутристрочные различия. Я использую xxdiff в UNIX. Я думаю, что WinMerge делает внутристрочные различия в Windows.

Другие ответы также хороши: wdiff или разбиение на фрагменты - границы фрагментов легче определить, если данные разделены, скажем, каналом или запятой.


1
К вашему сведению, xxdiff segfaults, если строки длиннее 32768 символов ...
ValarDohaeris

3

Если это единовременная проблема, я создаю копии файлов с \nсимволами, вставляемыми каждые 50 символов, а затем раздаю эти копии. (Я выбрал 50, потому что в математике легко перейти от разного номера строки к байтовому смещению в исходных файлах, но это можно изменить в зависимости от того, что я нашел.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.