Usando diff em um arquivo longo de uma linha

25

Eu tenho um arquivo que possui apenas uma linha. Seu tamanho é de cerca de 20.000 bytes.

O arquivo foi modificado e eu queria saber onde.

Eu pensei em usar diff, mas ele me mostra a linha completa, porque gera a linha que tem a diferença - mas, neste caso, é a única linha no arquivo que tem diferenças.

Então, eu queria ver qual é a diferença.

Algum conselho?

jperelli
fonte
3
Difere palavra por palavra? manpages.ubuntu.com/manpages/lucid/man1/wdiff.1.html
VenkatH 30/10
2
você tentou canalizá-lo para o fmt (se você estiver usando o linux, é claro), você poderia fazer "fmt -w 50 long.txt | diff" #
l1zard 30/12/12

Respostas:

13

Supondo que haja muitos espaços em branco, como no texto normal, você pode dividir o arquivo por palavras e compará-lo com uma ferramenta diff normal, por exemplo, meld:

tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split
Philipp Claßen
fonte
2
Parece ser a solução mais direta para mim. O problema de diff em si é trivial, no entanto, a maioria das ferramentas (não apenas as ferramentas de diff) não pode gerenciar linhas longas, portanto o problema está lidando com linhas longas, e não com a própria diferença.
p1100i
4

Eu encontraria um diff que faz diffs intra-linha. Eu uso o xxdiff no UNIX. Eu acho que o WinMerge faz diff intra-line no Windows.

As outras respostas também são boas: wdiff ou dividir em partes - os limites das partes são mais fáceis de definir se os dados são delimitados por digamos um tubo ou uma vírgula.

Rich Homolka
fonte
11
FYI, xxdiff segfaults se as linhas são mais longas do que 32768 caracteres ...
ValarDohaeris
3

Se esse for um problema único, eu criaria cópias dos arquivos com \ncaracteres inseridos a cada 50 caracteres e depois as difere. (Escolhi 50 porque facilita a matemática, passando de um número de linha diferente para o deslocamento de bytes nos arquivos originais, mas pode ajustar isso para cima / para baixo com base no que encontrei.)

Nicole Hamilton
fonte