Confronta due file rigorosamente riga per riga, senza inserimenti o eliminazioni


13

Ho due file che contengono essenzialmente un dump della memoria in formato esadecimale. Al momento utilizzo diff per vedere se i file sono diversi e dove sono le differenze. Tuttavia, questo può essere fuorviante quando si cerca di determinare la posizione esatta (ad es. L'indirizzo di memoria) della differenza. Considera l'esempio seguente che mostra i due file fianco a fianco.

file1:       file2:

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

Ora diff -umostrerà un inserimento e una cancellazione, sebbene 3 linee (posizioni di memoria) siano cambiate tra i due file:

 0001
+FFFF
 ABCD
 1234
-FFFF

Esiste un modo semplice per confrontare i due file in modo tale che ogni riga venga confrontata solo con la stessa riga (in termini di numerazione delle righe) nell'altro file? Quindi, in questo esempio, dovrebbe segnalare che le ultime 3 righe sono state modificate, insieme alle righe modificate da file1e file2. L'output non deve essere in stile diff, ma sarebbe bello se potesse essere colorato (al momento uso l' diff -uoutput in sedmodo da poterlo adattare facilmente).

Risposte:


18

Questo potrebbe essere un approccio:

diff <(nl file1) <(nl file2)

Con il nlnumero le linee che diffriconoscono le linee riga per riga.


3
Fantastico, non conoscevo il programma nl. Questi strumenti unix sono davvero utili, ma ce ne sono così tanti .
Fritz,

1
Ho appena provato questo, e sfortunatamente quello che ottengo è: ogni riga del primo file, seguita da ogni riga del secondo file ... invece della riga 1 dal file 1, seguita dalla riga 1 dal file due, seguita dalla riga 2 dal file uno, seguito dalla riga 2 dal file 2 ...
Michael Hewson,

@MichaelHewson Sembra che i tuoi due file non abbiano linee in comune. In tal caso, è così che difffunziona. Potresti provare il programma gui meldche mostra i due file fianco a fianco. Come inmeld <(nl file1) <(nl file2)
Fritz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.