Mam dwa pliki dziennika z tysiącami linii. Po wstępnym przetworzeniu różnią się tylko niektóre linie. Te pozostałe linie to albo rzeczywiste różnice, albo tasowane grupy linii.
Ujednolicone różnice pozwalają mi zobaczyć szczegółowe różnice, ale utrudnia ręczne porównanie z gałkami ocznymi. Side-by-side diffs wydaje się bardziej przydatny do porównania, ale dodaje także tysiące niezmienionych linii. Czy istnieje sposób na uzyskanie przewagi obu światów?
Uwaga: te pliki dziennika są generowane przez xscope
program monitorujący dane protokołu Xorg. Szukam narzędzi ogólnego zastosowania, które można by zastosować w sytuacjach podobnych do powyższego, na przykład nie wyspecjalizowanych narzędzi analizy dzienników dostępu do serwera WWW.
Dwa przykładowe pliki dziennika są dostępne na stronie http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13
i log14
). W xscope-filter
pliku można znaleźć polecenie przetwarzania wstępnego, które usuwa znaczniki czasu i inne drobne szczegóły.
diff
masz--suppress-common-lines
opcję? pastebin.com/KZrVCNFRvimdiff
(z pakietu vim ) lepiej spełni twoje potrzeby: wyświetlanie równoległe, pokolorowane, złożone linie wspólne. Numery linii można włączyć za pomocą:set number
.Odpowiedzi:
2 narzędzia różnicowe, których najczęściej używam, to meld i sdiff .
połączenie
Meld to GUI, ale świetnie sobie radzi z pokazywaniem różnic między plikami. Jest bardziej ukierunkowany na tworzenie oprogramowania z funkcjami, takimi jak możliwość przenoszenia zmian z jednej strony na drugą w celu scalenia zmian, ale może być używany jako proste narzędzie różnicowania.
sdiff
Używam tego narzędzia od lat. Generalnie uruchamiam go za pomocą następujących przełączników:
-b
Zignoruj zmiany w ilości białego pola.-W
Zignoruj wszystkie białe znaki.-B
Zignoruj zmiany, których wszystkie wiersze są puste.-s
Nie wysyłaj wspólnych linii.Często w przypadku plików dziennika konieczne jest zwiększenie szerokości kolumn, a
-w <num>
także poszerzenie ekranu.inne narzędzia, których używam z przerwami
diffc
Diffc jest skryptem w języku Python, który koloryzuje zunifikowane wyjście diff.
vimdiff
Vimdiff jest prawdopodobnie równie dobry, jeśli nie lepszy niż meld i można go uruchomić z terminala. Zawsze jednak zapominam o jego użyciu, co jest dla mnie dobrym wskaźnikiem, że uważam to narzędzie za trochę trudne do codziennego użytku. Ale YMMV.
źródło
colordiff
z colordiff.org jako pliku źródłowego. W moim rozumieniusdiff
jest podobny dodiff -y
bez różnic w wydajności, ale z nieco innymi opcjami. +1 za pokazanie dobrych alternatyw dla zwykłego porównania.diff -y
. Wydaje się, że dodanie tego przełącznikadiff
nastąpiło w pewnym momencie lub nigdy tego nie zauważyłem. Dodatkowo znajduje się link do strony zasobów narzędzia GNU Diff . Dobre rzeczy do korzystania z tego zestawu narzędzi.Obecnie używam diff side-by-side z grepem filtrującym różne linie:
-W250
poszerza wyjście, dzięki czemu mogę zobaczyć więcej danych.expand
jest konieczne do konwersji tabulatorów na spacje-C3
dodaje 3 linie kontekstu do wyjścia grep.^.{123}
dopasowuje połowę danych przed bocznymi znacznikami różnicowymi.colordiff
sprawia, że wyjście jest ładniejszeless -rS
pozwala na interpretację kolorów ANSI (-r
) i zapobiega zawijaniu linii (-S
).To jest hack, alternatywy są mile widziane.
źródło
grep
regex jest zbyt wolny. Równieżdiff
posiada-t
opcję rozszerzenia karty.Nikt jeszcze nie wspomniał o icdiff ? Wspaniale! Pic mówi sam za siebie:
źródło
Polecenie linux „sdiff” pokazuje różnice obok siebie, domyślnie włączając wszystkie linie, ale możesz użyć różnych opcji, aby pokazać tylko różnice:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
gdzie
-t: przetłumacz tabulatory na spacje
-W: ignoruj różnice białych znaków
-B: ignoruj puste linie
-s: ignoruj linie, które są takie same
-w $ KOLUMNY: użyj pełnej szerokości ekranu
Pokazane linie zostaną podzielone przez |, <lub> - zobacz dokumentację lub po prostu spróbuj.
źródło