Чи є ущільнений формат бічного боку різниці?


40

У мене є два файли журналів із тисячами рядків. Після попередньої обробки відрізняються лише деякі рядки. Ці решта є або реальними відмінностями, або перетасованими групами рядків.

Уніфіковані відмінності дозволяють мені побачити детальні відмінності, але це робить ручне порівняння з очними яблуками важким. Бічний бік diffs здається більш корисним для порівняння, але він також додає тисячі незмінних ліній. Чи є спосіб отримати перевагу обох світів?

Зауважте, ці файли журналів створюються за xscopeдопомогою програми, яка контролює дані протоколу Xorg. Я шукаю інструменти загального призначення, які можна застосувати у подібних до вищезгаданих ситуаціях, наприклад, не спеціалізовані засоби аналізу журналів доступу до веб-сервера.


Два приклади файлів журналу доступні на веб-сторінці http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13і log14). У xscope-filterфайлі можна знайти команду попереднього процесора, яка видаляє часові позначки та інші незначні деталі.


2
Чи diffє у вас --suppress-common-linesваріант? pastebin.com/KZrVCNFR
манатура

1
@manatwork Приємно, так і є. Будь-який спосіб додати більше контексту (наприклад, номери рядків)?
Лекенштейн

5
Тоді можливо vimdiff(з пакету vim ) краще задовольнить ваші потреби: паралельний дисплей, кольорові кольори, загальні лінії, складені. Номери рядків можна вмикати за допомогою :set number.
манатура

Я думаю, ви повинні поставити vimdiff як відповідь :)
Kotte

1
Інструменти CLI є кращими, але інструменти GUI також дозволені, якщо вони досить крихітні. Я спробував kdiff3, але він все ще вироблявся докладно. В ідеалі я не бачу всіх зайвих деталей. Я додаю два набори даних.
Лекенштейн

Відповіді:


37

Двома різними інструментами, якими я користуюся найбільше, будуть meld та sdiff .

мідь

Meld - це графічний інтерфейс, але робить велику роботу в пошуку різниць між файлами. Він більше орієнтований на розробку програмного забезпечення з такими функціями, як можливість переміщення змін з однієї сторони на іншу для об'єднання змін, але може використовуватися лише як прямий інструмент, що відрізняється стороною.

    ss meld

    ss підсвічування коду meld

sdiff

Я цим інструментом користувався роками. Я, як правило, запускаю його наступними перемикачами:

$ sdiff -bBWs file1 file2
  • -b Ігноруйте зміни кількості білого простору.
  • -W Ігноруйте весь простір.
  • -B Ігноруйте зміни, рядки яких порожні.
  • -s Не виводити загальні лінії.

Часто з файлами журналів вам потрібно зробити ширину стовпців ширшими, ви можете використовувати -w <num>ширший екран.

інші інструменти, якими я користуюсь і вимикаю

розм

Diffc - це сценарій пітона, який забарвлює уніфікований різний вихід.

$ diffc [OPTION] FILE1 FILE2

             ss різн

vimdiff

Vimdiff , напевно, такий же хороший, якщо не краще, ніж meld, і його можна запустити з терміналу. Я завжди забуваю використовувати його, хоча це, на мій погляд, хороший показник того, що я знаходжу цей інструмент трохи важким, щоб використовувати день у день. Але YMMV.

                                    ss vimdiff


1
Однією з відмінних особливостей Meld, на жаль, не видно на екрані екрану, є підсвічування синтаксису файлів вихідного коду.
манатура

Так. Я звик використовувати vimdiff весь час, з тих пір я перейшов до використання meld, я вважаю, що це простіше у використанні, і просто простіше зрозуміти, що це говорить мені проти vimdiff.
slm

@manatwork - додав ваше посилання на відповідь, дякую за відгуки!
slm

1
Чудово виглядає для вихідного коду, але не стільки для порівняння файлів журналів. Я часто використовую colordiffз colordiff.org для вихідного файлу. Наскільки я розумію,sdiff вона схожа на diff -yвідсутність відмінностей у виробництві, але дещо інші варіанти. +1 для показу хороших альтернатив звичайній розл.
Лекенштейн

Я ніколи не використовував colordiff, мені доведеться це перевірити. Ти прав наdiff -y . Додавання цього перемикача до, diffздається, сталося в якийсь момент, або я його ніколи не помічав. Додатково ось посилання на сторінку ресурсів інструментів gnu diff . Гарні речі для використання цього набору інструментів.
slm

20

В даний час я використовую бічну сторону diff з фільтром grep для різних ліній:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Опція -W250робить висновок ширшим таким, що я бачу більше даних.
  • expand необхідно перетворити вкладки в пробіли
  • -C3 додає 3 рядки контексту до виводу grep.
  • ^.{123} відповідає половині даних перед бічними сторонами відмінних маркерів.
  • colordiff робить висновок красивішим для наслідування
  • less -rSдозволяє інтерпретувати кольори ANSI ( -r) та запобігає загортанню ліній ( -S).

Це злом, альтернативи вітаються.


1
Це чудово.
Пат Мірон

Хороша ідея. На жаль, grepвиразка занадто повільна. Також diffє -tможливість розширення вкладок.
Timmmm


0

Команда "sdiff" linux показує бічні сторонні відмінності, за замовчуванням включаючи всі рядки, але ви можете використовувати різні параметри для відображення лише відмінностей:

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

де

-t: перекладіть вкладки на пробіли

-W: ігноруйте відмінності пробілів

-B: ігноруйте порожні рядки

-s: ігноруйте однакові рядки

-w $ COLUMNS: використовувати повну ширину екрана

Показані рядки будуть розділені на |, <або> - переглянути документацію або просто спробувати.

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