Compare dois arquivos estritamente linha por linha, sem inserções ou exclusões

13

Eu tenho dois arquivos que contêm essencialmente um despejo de memória em um formato hexadecimal. No momento eu uso diff para ver se os arquivos são diferentes e onde estão as diferenças. No entanto, isso pode ser enganoso ao tentar determinar a localização exata (ou seja, endereço de memória) da diferença. Considere o exemplo a seguir, mostrando os dois arquivos lado a lado.

file1:       file2:

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

Agora diff -umostrará uma inserção e uma exclusão, embora três linhas (localizações da memória) tenham sido alteradas entre os dois arquivos:

 0001
+FFFF
 ABCD
 1234
-FFFF

Existe uma maneira fácil de comparar os dois arquivos, de modo que cada linha seja comparada apenas com a mesma linha (em termos de numeração de linha) no outro arquivo? Portanto, neste exemplo, ele deve relatar que as três últimas linhas foram alteradas, juntamente com as linhas alteradas de file1e file2. A saída não precisa ser do estilo diff, mas seria legal se pudesse ser colorida (no momento em que eu colorir a diff -usaída usando sedpara que possa ser facilmente adaptada).

Fritz
fonte

Respostas:

18

Esta poderia ser uma abordagem:

diff <(nl file1) <(nl file2)

Com nlnúmero, as linhas que diffreconhecem as linhas linha por linha.

caos
fonte
3
Isso é legal, eu não conhecia o programa nl. Essas ferramentas unix são realmente úteis, mas existem muitas .
Fritz
1
Eu apenas tentei isso e, infelizmente, o que recebo é: todas as linhas do primeiro arquivo, seguidas por todas as linhas do segundo arquivo ... em vez da linha 1 do arquivo 1, seguida da linha 1 do arquivo 2, seguida da linha 2 do arquivo um, seguido pela linha 2 do arquivo 2 ...
Michael Hewson
@ MichaelHewson Parece que seus dois arquivos não têm linhas em comum. Nesse caso, é assim que difffunciona. Você pode tentar o programa gui, meldque mostra os dois arquivos lado a lado. Comomeld <(nl file1) <(nl file2)
Fritz