LINUX.ORG.RU

Сравнение текстовых файлов


0

0

Как сравнить 2 текстовых файла?

Файлы содержат примерно одинаковый текст, но с разными ошибками и разным форматированием. Например, в одном файле может быть «карова», а в другом на том же месте — «корово». Под форматированием я имею в виду число пробелов и табуляций между словами, число пустых строк между абзацами, разрыв одной строки на несколько. Желательно, чтобы каждая расходящаяся пара слов (или даже букв) выводилась в виде наподобие «номер строки в 1-ом файле»-«номер слова в 1-ом файле»-«номер строки во 2-ом файле»-«номер слова во 2-ом файле»-«отличающиеся слова».

diff, по идее, умеет искать расходящиеся строки, но его сбивает с толку неодинаковое разбиение на абзацы, ключ -w не помогает.

Можно порубить файлы на строки по каждому пробелу и убрать пустые строки, например, sed-ом, и сравнивать diff-ом, но это неудобно.

Как ещё можно сравнить эти файлы?

Заранее спасибо.

★★★★★

meld.
В настройках можно установить фильтры различий, чтобы игнорировались различия в виде пустых строк, пробелов, etc.

d_a ★★★★★
()
Ответ на: комментарий от d_a

> meld

Спасибо, похоже на то, что мне нужно. Собираю.

Версия 1.3.0 умеет обрабатывать несколько файлов одновременно, выделять различающиеся буквы и показывать статистику различий?

question4 ★★★★★
() автор топика
Ответ на: комментарий от d_a

Что-то не хочет работать.

Какой задать фильтр в Edit-Preferences-Фильтры различий, чтобы совпали абзацы, различающиеся только пробелами и разрывами? [ \n\r]* ?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Документация по Python советует \s* . Всё равно не работает.

question4 ★★★★★
() автор топика

Из визуальных диффов мне больше всего нравится kdiff3. По теме думаю имеет смысл написать небольшой препроцессор, который все абразы сведёт в строку, ( и песли надо затем разобьет заново), это можно быстро написать, затем сравничать если надо - визуальным.

gena2x ★★★
()

в МС(с русского форка) есть возможность по ctrl-x+ctrl-y сравнивать два файла, с подсветкой.

S_Paul ★★★★★
()
Ответ на: комментарий от S_Paul

> в МС(с русского форка) есть возможность по ctrl-x+ctrl-y сравнивать два файла, с подсветкой.

MC из git, ctrl-x+ctrl-y выводит в командной строке имя архива, который я вчера открывал. В режиме редактирования Ctrl-y удаляет строки.

Какую программу задействует MC для сравнения? Если diff, то не годится.

question4 ★★★★★
() автор топика
Ответ на: комментарий от gena2x

Из визуальных диффов мне больше всего нравится kdiff3.

Внутри у него diff3, от которого я так и не добился желаемого результата.

имеет смысл написать небольшой препроцессор,

В итоге так и сделал:

for fil in ph*.txt; 
do sed 's/[ \t\r]/\n/g' $fil | sed '$ s/$/\n/'| sed '/^$/d' >> preprocessed-ph.txt; 
done

И сравнивал файлы preprocessed-*.txt обычным diff-ом попарно.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

в МС из русского форка, его уже нет , они «подключились» к основной команде разработки.
и постепенно добавляют свои патчи.
можно спросить у Slavaz, когда данный функционал появится и в текущем МС?
штука удобная.

S_Paul ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.