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
719016
źródło
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
fedorqui 'SO przestań szkodzić'
źródło
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.

timmfin
źródło
30
diff -y --suppress-common-lines file1 file2
Rjazhenka
źródło
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.

srpatch
źródło
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ą.

Chris Seymour
źródło
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
7

Możesz po prostu użyć:

diff -y fileA.txt fileB.txt | colordiff

Pokazuje wyjście podzielone na dwie kolumny i pokolorowane! ( colordiff)

Jorge Fernando Matricali
źródło
1
Właśnie wypróbowałem to na OSX i tutaj nie działa. Może to tylko dla Linuksa.
Nikola Petkanski
colordiff nie jest na OSX.
frotte franguiadakis
Możesz zainstalować colordiff na OSX przy użyciu formuły colordiff Homebrew brew install colordiff See
Jorge Fernando Matricali
6

Skorzystaj z -yopcji:

diff -y file1 file2
rectummelancolique
źródło
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.

ymattw
źródło
5

Możesz użyć vimdiff.

Przykład:

vimdiff file1 file2
Eduardo Cuomo
źródło
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
Wiadro
źródło
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
ahmet
źródło