У меня есть несколько дампов SQL, которые я смотрю на различия между. diff
очевидно, может показать мне разницу между двумя строками, но я схожу с ума, пытаясь найти, какие значения в длинном списке значений, разделенных запятыми, на самом деле являются теми, которые приводят к тому, что строки различаются.
Какой инструмент я могу использовать, чтобы указать точные символьные различия между двумя строками в определенных файлах?
command-line
diff
user394
источник
источник
Ответы:
Для этого есть wdiff , слово-diff.
На рабочем столе Meld может выделить различия в строке для вас.
источник
wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" file1 file2
wdiff a b | colordiff
dwdiff
инструмент, который в основном совместим с,wdiff
но также поддерживает цветной вывод и, возможно, некоторые другие функции. И это более доступно в некоторых дистрибутивах Linux, таких как Arch.wdiff -n a b | colordiff
, советуетman colordiff
.Еще один метод, использующий git-diff:
grep -v, если не интересует позиции различий.
источник
Я использовал
vimdiff
для этого.Вот скриншот (не мой), показывающий незначительные различия в одном или двух символах, которые очень хорошо выделяются. Краткий учебник тоже .
источник
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
, предлагается stackoverflow.com/a/45333535/2097284 .Вот метод "... волосы собаки, которая укусила тебя" ... подтолкнула
diff
тебя к этой точке; использовать его, чтобы вы пошли дальше ...Вот результат использования пар строк образца ...
☻
указывает на вкладкуВот сценарий ... Вам просто нужно как-то найти пары линий ... (я использовал diff только один раз (дважды?) До сегодняшнего дня, так что я не знаю его много вариантов, и разбираюсь с вариантами для этого сценария мне хватило, на один день :) .. думаю, он должен быть достаточно простым, но я должен на кофе-брейк ....
источник
wdiff
на самом деле очень старый метод сравнения файлов слово за словом. Он работал, переформатируя файлы, затем используя их,diff
чтобы найти различия и передавая их снова. Я сам предложил добавить контекст, так чтобы вместо пословного сравнения это делалось с каждым словом, окруженным другими словами «контекста». Это позволяет diff лучше синхронизировать себя на общих местах в файлах, особенно когда файлы в основном отличаются только несколькими блоками общих слов. Например, при сравнении текста на предмет плагиата или повторного использования.dwdiff
был позже создан изwdiff
. Ноdwdiff
использует эту функцию переформатирования текста для хорошего эффекта вdwfilter
. Это отличная разработка - это означает, что вы можете переформатировать один текст, чтобы он соответствовал другому, а затем сравнить их с помощью любого построчного графического средства отображения различий. Например, используя его с «диффузным» графическим diff ....Это переформатирует
file1
в форматfile2
и дает этоdiffuse
для визуального сравнения.file2
не изменяется, так что вы можете редактировать и объединять различия слов в него непосредственно вdiffuse
. Если вы хотите редактироватьfile1
, вы можете добавить,-r
чтобы отменить, какой файл переформатировать. Попробуйте, и вы найдете, что это очень мощный!Я предпочитаю графический интерфейс (показанный выше), так
diffuse
как он выглядит намного чище и полезнее. Также это отдельная программа на Python, что означает, что ее легко установить и распространить на другие системы UNIX.Другие графические различия, кажется, имеют много зависимостей, но также могут быть использованы (на ваш выбор). К ним относятся
kdiff3
илиxxdiff
.источник
Используя в качестве основы решение @ Peter.O, я переписал его, чтобы внести ряд изменений.
./hairOfTheDiff.sh file1.txt file2.txt
demo
источник; это может открыть дверь для причудливого трубопровода, чтобы не нуждаться в файлах для двух отдельных входов, используяpaste
и несколько файловых дескрипторов.Отсутствие выделения означает, что символ был в обеих строках, выделение означает, что он был в первой, а красный - во второй.
Цвета можно изменять с помощью переменных в верхней части скрипта, и вы даже можете полностью отказаться от цветов, используя обычные символы для выражения различий.
источник
Вот простой однострочник:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
Идея состоит в том, чтобы заменить запятые (или какой-либо разделитель, который вы хотите использовать) с использованием новой строки
sed
.diff
затем заботится обо всем остальном.источник
.csv
легко создать электронную таблицу,(A7==K7) ? "" : "diff"
вставить формулу или аналогичное и вставить копию.источник
В командной строке я хотел бы убедиться, что я добавил разумные новые строки, прежде чем сравнивать файлы. Вы можете использовать sed, awk, perl или что-то действительно, чтобы добавлять разрывы строк каким-то систематическим способом - убедитесь, что не добавляете слишком много.
Но я считаю, что лучше всего использовать vim, поскольку он выделяет различия в словах. vim хорош, если различий не так много, а различия просты.
источник
kdiff3 становится стандартным средством просмотра различий GUI в Linux. Это похоже на xxdiff , но я думаю, что kdiff3 лучше. Он хорошо справляется со многими задачами, включая ваш запрос показать «точные различия символов между двумя строками в определенных файлах».
источник
Если я правильно читаю ваш вопрос, я использую
diff -y
для такого рода вещи.Это делает сравнение параллельным сравнением намного проще, чтобы найти, какие строки выбрасывают различия.
источник
У меня была та же проблема, и я решил ее с помощью PHP Fine Diff , онлайн-инструмента, который позволяет вам определять гранулярность. Я знаю, что это технически не инструмент * nix, но я действительно не хотел загружать программу просто для того, чтобы выполнить разовую разность уровней персонажа.
источник