unix diff résultats côte à côte?

106

Comment puis-je tracer les résultats d'une commande unix diff côte à côte au lieu d'une différence après l'autre? Voir ci-dessous pour un exemple:

    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

J'aimerais avoir quelque chose comme:

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
la source
vimdiff peut également vous aider. Bonne chance.
shellter

Réponses:

168

De man diff, vous pouvez utiliser -ypour faire côte à côte.

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

Par conséquent, dites:

diff -y /tmp/test1  /tmp/test2

Tester

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

Comparons-les:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you
fedorqui 'Alors arrêtez de nuire'
la source
39
Notez qu'il diffa une largeur de sortie maximale codée en dur (130 colonnes). Ajoutez l'option diff --width=$COLUMNSpour définir cela sur la largeur de votre terminal.
ntc2
6
Aussi pour les gros diffs, il suffit de mettre moins comme ça pour un joli diff scrolly / interrogeable:diff -y /tmp/test1 /tmp/test2 | less
willbradley
Découvrez colordiff
Vladislavs Dovgalecs
5
mieuxdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77
@ rubo77 En fonction de la façon dont vous avez configuré l'expansion des onglets, vous pouvez également développer les tabulations en espaces afin que la sortie s'aligne correctement dans les colonnes:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach
40

Depuis la page d' accueil d'icdiff :

entrez la description de l'image ici

Votre terminal peut afficher des couleurs, mais la plupart des outils de comparaison n'en font pas bon usage. En mettant en évidence les modifications, icdiff peut vous montrer les différences entre des fichiers similaires sans vous gêner. Ceci est particulièrement utile pour identifier et comprendre les petits changements dans les lignes existantes.

Au lieu d'essayer d'être un remplaçant de diff pour toutes les circonstances, le but d'icdiff est d'être un outil que vous pouvez atteindre pour obtenir une meilleure image de ce qui a changé quand ce n'est pas immédiatement évident à partir de diff.

IMHO, sa sortie est beaucoup plus lisible que diff -y .

Timmfin
la source
29
diff -y --suppress-common-lines file1 file2
Rjazhenka
la source
3
cela devrait être la réponse acceptée parce que -ymontre simplement des lignes communes qui ne sont pas les mêmes que juste diffet la question originale. +1.
helix
mieuxdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77
13

Vous pouvez utiliser:

sdiff  file1 file2

ou

diff -y file1 file2

ou

vimdiff file1 file2

pour un affichage côte à côte.

srpatch
la source
2
Je me demandais quelle est la différence entre diff -yet sdiff? Leur sortie me semble identique.
Hux
11

Vous devriez avoir sdiffpour la fusion côte à côte des différences de fichiers. Lisez man sdiffl'histoire complète.

Chris Seymour
la source
2
Sur mon système (GNU / Linx) sdiffsemble faire la même chose que diff -yet la sdiffdocumentation info dit que c'est obsolète: "'sdiff' sans '--output' ('-o') produit une différence côte à côte. Cette utilisation est obsolète; utilisez plutôt l'option '--side-by-side' ('-y') de 'diff'. "
ntc2
7

Vous pouvez simplement utiliser:

diff -y fileA.txt fileB.txt | colordiff

Il montre la sortie divisée en deux colonnes et colorisée! ( colordiff)

Jorge Fernando Matricali
la source
1
Je viens de l'essayer sur OSX et cela ne fonctionne pas ici. Peut-être que c'est pour Linux uniquement.
Nikola Petkanski
colordiff n'est pas sur osx.
terry franguiadakis
Vous pouvez installer colordiff sur OSX en utilisant la formule Homebrew brew install colordiff Voir colordiff
Jorge Fernando Matricali
6

Utilisez l' -yoption:

diff -y file1 file2
rectummelancolique
la source
6

Essayez cdiff - Affichez les différences incrémentielles en couleur dans l'espace de travail ou à partir de stdin avec prise en charge côte à côte et pager automatique.

ymattw
la source
5

Vous pouvez utiliser vimdiff.

Exemple:

vimdiff file1 file2
Eduardo Cuomo
la source
4

Si vos fichiers ont une utilisation incohérente d'espaces et d'onglets, vous trouverez peut-être utile d'inclure l' -targument pour développer les onglets:

diff -ty file1 file2
Seau
la source
1

Commande de différence améliorée avec couleur, côte à côte et alias

Disons que le contenu du fichier est comme:

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

et

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

Maintenant comparant côte à côte

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

Vous pouvez définir l'alias à utiliser

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

Puis nouveau résultat de diff:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
Ahmet
la source