Diff инструмент, который я могу заставить определенные линии соответствовать

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

Например: ФАЙЛ1

test1
    subline1
    subline2
    subline3
test2
    subline1
    subline2
    subline3
    subline4
test3
    subline1
    subline2
    subline3
test4
    subline1
test5
    subline2
    subline3
    subline4

FILE2

test1
    subline1
    subline2
    subline3
test3
    subline1
    subline2
    subline3
    subline4
test4
    subline1
    subline2
    subline3
    subline4

Любыми инструментами, которые я там использую, я не могу навязать идеальное совпадение в строке с помощью "test", и, поскольку содержимое блоков одинаковое, оно всегда совпадает некорректно.

Смотрите изображения ниже: Блокнот ++ Сравнить Winmerge

Meld и diff тоже не сработали.

Спасибо

2 ответа

diff это алгоритм, основанный на строках, но кажется, что вы хотите сопоставить не строки, а блоки строк.

Одна возможность состоит в том, чтобы использовать промежуточный шаг, чтобы поместить каждый блок в одну строку, объединяя блоки в строке, тогда вы можете использовать diff на результат.

git diff который поддерживает 4 различных алгоритма сравнения, и вы можете различать два файла, даже если они не находятся в git-репо:

--diff-algorithm={patience|minimal|histogram|myers}
       Choose a diff algorithm. The variants are as follows:

       default, myers
           The basic greedy diff algorithm. Currently, this is the default.

       minimal
           Spend extra time to make sure the smallest possible diff is produced.

       patience
           Use "patience diff" algorithm when generating patches.

       histogram
           This algorithm extends the patience algorithm to "support low-occurrence common elements".

       For instance, if you configured diff.algorithm variable to a non-default value and want to use the
       default one, then you have to use --diff-algorithm=default option.

Однако при тестировании ваших файлов все алгоритмы дали тот же результат, что и diff было бы.

Существуют и другие инструменты для разграничения структурированных форматов, такие как XML или JSON. Блочные разности, которые вам нужны, не основаны ни на строках, ни на другой формальной структуре.

В конечном счете, я думаю, что для того, чтобы алгоритм работы работал на вас, ваши данные должны быть линейными или в другом формальном формате.

TotalCommander поможет вам (сравнить по содержанию)

Другие вопросы по тегам