wyniki unix diff side-to-side?


108

Jak mogę wykreślić wyniki polecenia unix diff obok siebie zamiast jednej różnicy po drugiej? Poniżej przykład:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

Chciałbym mieć coś takiego:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa

vimdiff też może pomóc. Powodzenia.
shellter

Odpowiedzi:


169

Od man diff, możesz używać -ydo robienia obok siebie.

-y, --side-by-side
       output in two columns

Dlatego powiedz:

diff -y /tmp/test1  /tmp/test2

Test

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

Porównajmy je:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
Zwróć uwagę, że diffma zakodowaną na stałe maksymalną szerokość wyjściową (130 kolumn). Dodaj opcję diff, --width=$COLUMNSaby ustawić ją na szerokość terminala.
ntc2

6
Również w przypadku dużych różnic po prostu przerzuć do mniej takich, aby uzyskać ładny przewijany / przeszukiwalny diff:diff -y /tmp/test1 /tmp/test2 | less
willbradley

sprawdź colordiff
Vladislavs Dovgalecs

5
lepiejdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77 W zależności od tego, jak skonfigurowałeś rozwijanie kart, możesz również rozwinąć tabulatory do spacji, aby dane wyjściowe były poprawnie wyrównane w kolumnach:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach

40

Od icdiff na stronie :

wprowadź opis obrazu tutaj

Twój terminal może wyświetlać kolor, ale większość narzędzi porównujących nie robi z tego dobrego użytku. Podświetlając zmiany, icdiff może pokazać różnice między podobnymi plikami bez przeszkadzania. Jest to szczególnie pomocne przy identyfikowaniu i zrozumieniu niewielkich zmian w istniejących liniach.

Zamiast próbować zastępować różnice w każdych okolicznościach, celem icdiff jest bycie narzędziem, po które można sięgnąć, aby uzyskać lepszy obraz tego, co się zmieniło, gdy nie jest to od razu oczywiste z diff.

IMHO, jego wyjście jest znacznie bardziej czytelne niż diff -y.


30
diff -y --suppress-common-lines file1 file2

3
powinna to być akceptowana odpowiedź, ponieważ -ypokazuje tylko wspólne diffkwestie, co nie jest tym samym, co właściwe i oryginalne pytanie. +1.
helix

lepiejdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

spóźniony na imprezę :-(. ale co to jest -W $COLUMNS. Czy ktoś może eloborować
samshers

14

Możesz użyć:

sdiff  file1 file2

lub

diff -y file1 file2

lub

vimdiff file1 file2

do wyświetlania obok siebie.


2
Zastanawiałem się, jaka jest różnica między diff -yi sdiff? Ich produkcja wygląda identycznie jak ja.
Hux

11

Powinieneś mieć sdiffdo łączenia obok siebie różnic w plikach. Zapoznaj się z man sdiffpełną historią.


2
W moim systemie (GNU / Linx) sdiffwydaje się robić to samo, co, diff -ya sdiffdokumentacja informacyjna mówi, że jest przestarzała: „'sdiff' bez '--output' ('-o') tworzy równoległą różnicę. jest przestarzałe; zamiast tego użyj opcji '--side-by-side' ('-y') opcji 'diff'. "
ntc2



6

Wypróbuj cdiff - Wyświetl kolorowe, przyrostowe różnice w przestrzeni roboczej lub ze standardowego wejścia z obsługą obok siebie i automatycznego pagera.



4

Jeśli Twoje pliki mają niespójne użycie spacji i tabulatorów, pomocne może być dołączenie -targumentu rozwijania tabulatorów:

diff -ty file1 file2

0

Ulepszone polecenie diff z kolorem, obok siebie i aliasem

Powiedzmy, że zawartość pliku jest następująca:

cat /tmp/test1.txt
1
2
3
4
5
8
9

i

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

Teraz porównujemy obok siebie

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

Możesz zdefiniować alias do użycia

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

Następnie nowy wynik diff:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.