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

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

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 .


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

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.


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.


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)


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

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.



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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.