
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.
Pensei em usar o diff, mas ele me mostra a linha completa, pois gera a linha que tem a diferença - mas neste caso é a única linha do arquivo que tem diferenças.
Então eu queria ver qual é a diferença.
Algum conselho?
Responder1
Supondo que existam muitos espaços em branco, como no texto normal, você pode dividir o arquivo por palavras e compará-lo com uma ferramenta de comparação 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
Responder2
Eu encontraria um diff que fizesse diferenças intra-linha. eu usoxxdiffno UNIX. Eu pensoWinMergefaz diferença intra-linha no Windows.
As outras respostas também são boas: wdiff ou divisão em pedaços - os limites dos pedaços são mais fáceis de definir se os dados forem delimitados por, digamos, uma barra vertical ou uma vírgula.
Responder3
Se este for um problema único, eu criaria cópias dos arquivos com \n
caracteres inseridos a cada 50 caracteres e depois compararia essas cópias. (Eu escolhi 50 porque facilita a matemática, desde diferentes números de linha até deslocamento de bytes nos arquivos originais, mas posso ajustar isso para cima/para baixo com base no que encontrei.)
Responder4
Achei git diff
a --word-diff=porcelain
opção útil para tal tarefa, por exemplo, dados 2 arquivos com linhas longas que diferem apenas em 1 caractere, a saída pode ser canalizada grep
para filtrar as linhas alteradas e alterações e, em seguida, grep
novamente para mostrar apenas as últimas 80 caracteres de cada linha:
echo {1..4000} A {4001..8000} > a.tmp
echo {1..4000} B {4001..8000} > b.tmp
> git diff -U0 --word-diff=porcelain a.tmp b.tmp | grep -A3 '@@' | egrep -o '.{1,80}$'
@@ -1 +1 @@
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
-A
+B