У меня есть два файла журнала с тысячами строк. После предварительной обработки отличаются только некоторые строки. Эти оставшиеся строки являются либо реальными различиями, либо перетасованными группами линий.
Унифицированные различия позволяют мне видеть подробные различия, но это затрудняет ручное сравнение с глазными яблоками. Дифференциальные различия кажутся более полезными для сравнения, но они также добавляют тысячи неизмененных строк. Есть ли способ получить преимущество обоих миров?
Обратите внимание, что эти файлы журнала создаются xscope
программой, которая отслеживает данные протокола Xorg. Я ищу инструменты общего назначения, которые можно применять в ситуациях, подобных описанным выше, например, не специализированные инструменты анализа журналов доступа к веб-серверу.
Два примера файлов журнала доступны по адресу http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13
и log14
). В xscope-filter
файле находится команда препроцессора, которая удаляет временные метки и другие мелкие детали.
diff
вас--suppress-common-lines
вариант? pastebin.com/KZrVCNFRvimdiff
(из пакета vim ) будет лучше удовлетворять ваши потребности: параллельное отображение, раскрашены, общие линии сложены. Номера строк можно включить с помощью:set number
.Ответы:
2 инструмента сравнения, которые я использую больше всего, будут meld и sdiff .
MELD
Meld - это графический интерфейс, но он отлично показывает разницу между файлами. Он больше предназначен для разработки программного обеспечения с такими функциями, как возможность перемещать изменения с одной стороны на другую, чтобы объединять изменения, но его можно использовать как простой инструмент сравнения друг с другом.
SDiff
Я использовал этот инструмент в течение многих лет. Я обычно запускаю его со следующими переключателями:
-b
Игнорировать изменения количества пустого пространства.-W
Игнорировать все пустое пространство.-B
Игнорировать изменения, чьи строки все пустые.-s
Не выводить общие строки.Зачастую с файлами журналов вам нужно увеличить ширину столбцов, которые вы можете использовать,
-w <num>
чтобы сделать экран шире.другие инструменты, которые я использую время от времени
Diffc
Diffc - это скрипт на python, который раскрашивает унифицированный вывод diff.
vimdiff
Vimdiff , вероятно, так же хорош, если не лучше, чем meld, и его можно запускать из терминала. Я всегда забываю использовать его, хотя, по-моему, это хороший показатель того, что я нахожу этот инструмент слишком сложным для повседневного использования. Но YMMV.
источник
colordiff
из colordiff.org для исходного файла. Насколько я понимаю,sdiff
похоже наdiff -y
без различий в выводе, но немного другие варианты. +1 за показ некоторых хороших альтернатив простой diff.diff -y
. Добавление этого переключателя в,diff
кажется, произошло в какой-то момент, или я никогда не замечал этого. Кроме того, здесь есть ссылка на страницу ресурса инструментов GNU diff . Хорошие вещи для использования этого набора инструментов.В настоящее время я использую параллельный diff с grep-фильтрацией различных строк:
-W250
делает вывод шире, так что я могу видеть больше данных.expand
необходимо конвертировать вкладки в пробелы-C3
добавляет 3 строки контекста к выводу grep.^.{123}
соответствует половине данных перед соседними маркерами diff.colordiff
делает вывод красивее, чтобы следоватьless -rS
позволяет интерпретировать цвета ANSI (-r
) и предотвращает перенос строк (-S
).Это взлом, альтернативы приветствуются.
источник
grep
регулярное выражение слишком медленное. Такжеdiff
есть-t
возможность расширить вкладки.Никто еще не упомянул icdiff ? Здорово! Пик говорит сам за себя:
источник
Команда linux "sdiff" показывает параллельные различия, по умолчанию включающие все строки, но вы можете использовать различные опции, чтобы показать только различия:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
где
-t: переводить табуляцию в пробелы
-W: игнорировать пробельные различия
-B: игнорировать пустые строки
-s: игнорировать одинаковые строки
-w $ COLUMNS: использовать полную ширину экрана
Показанные строки будут разделены на |, <или> - см. Документацию или просто попробуйте.
источник