Comparez deux fichiers strictement ligne par ligne, sans insertions ni suppressions


13

J'ai deux fichiers qui contiennent essentiellement des vidages de mémoire au format hexadécimal. Pour le moment, j'utilise diff pour voir si les fichiers sont différents et où sont les différences. Cependant, cela peut être trompeur lorsque vous essayez de déterminer l'emplacement exact (c'est-à-dire l'adresse mémoire) de la différence. Considérez l'exemple suivant montrant les deux fichiers côte à côte.

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

Affiche maintenant diff -uune insertion et une suppression, bien que 3 lignes (emplacements de mémoire) aient changé entre les deux fichiers:

 0001
+FFFF
 ABCD
 1234
-FFFF

Existe-t-il un moyen simple de comparer les deux fichiers de sorte que chaque ligne ne soit comparée qu'à la même ligne (en termes de numérotation des lignes) dans l'autre fichier? Donc, dans cet exemple, il doit signaler que les 3 dernières lignes ont changé, ainsi que les lignes modifiées de file1et file2. La sortie n'a pas besoin d'être de style diff, mais ce serait cool si elle pouvait être colorée (pour le moment je colorie la diff -usortie en utilisant sedce qui pourrait facilement être adapté).

Réponses:


18

Cela pourrait être une approche:

diff <(nl file1) <(nl file2)

Avec nlnuméro les lignes qui diffreconnaissent les lignes ligne par ligne.


3
C'est cool, je ne connaissais pas le programme nl. Ces outils Unix sont vraiment pratiques, mais ils sont nombreux .
Fritz

1
Je viens de l'essayer, et malheureusement ce que j'obtiens est: chaque ligne du premier fichier, suivie de chaque ligne du deuxième fichier ... au lieu de la ligne 1 du fichier 1, suivie de la ligne 1 du fichier deux, suivie de la ligne 2 du fichier un, suivi de la ligne 2 du fichier 2 ...
Michael Hewson

@MichaelHewson Il semble que vos deux fichiers n'aient pas de lignes en commun. Dans ce cas, c'est comme ça que ça diffmarche. Vous pouvez essayer le programme gui meldqui montre les deux fichiers côte à côte. Comme dansmeld <(nl file1) <(nl file2)
Fritz
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.