Використання diff у довгому файлі з одним рядком


25

У мене є файл, який містить лише один рядок. Її розмір становить близько 20000 байт.

Файл змінено, і я хотів знати, де.

Я думав, що використовувати diff, але він показує мені повний рядок, тому що він виводить рядок, який має різницю - але в цьому випадку це єдиний рядок у файлі, який має відмінності.

Тому я хотів побачити, у чому різниця.

Будь-яка порада?


3
Відмінність слово за словом? manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH

2
ви спробували передати його на fmt (якщо ви, звичайно, використовуєте linux), ви можете зробити "fmt -w 50 long.txt | diff"
l1zard

Відповіді:


13

Якщо припустити, що пробілів є багато, як у звичайному тексті, ви можете розділити файл на слова і порівняти його із звичайним інструментом 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
Це здається для мене найпростішим рішенням. Сама проблема розбіжності є тривіальною, проте більшість інструментів (не лише диф-інструменти) не можуть керувати довгими лініями, тому проблема стосується ш / довгих рядків, а не самих різних.
p1100i

4

Я знайду різницю, яка робить внутрішньолінійні відмінності. Я використовую xxdiff в UNIX. Я думаю, що WinMerge не відрізняється від внутрішніх ліній у Windows.

Інші відповіді також хороші: wdiff, або розбиття на шматки - межі фрагменту простіше визначити, якщо дані розмежовані, скажімо, трубою або комою.


1
FYI, xxdiff помилку сегментації , якщо рядки довші 32768 символів ...
ValarDohaeris

3

Якщо це разова проблема, я б створив копії файлів із \nсимволами, вставленими кожні 50 символів, а потім відрізняв ці копії. (Я вибрав 50, тому що це дозволяє математиці легко переходити від різного номера рядка до зміщення байтів у вихідних файлах, але може коригувати це вгору / вниз залежно від того, що я знайшов.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.