Dados dois arquivos, como encontro o número total de mudanças de linha?

1

Eu tentei usar este comando para calcular o número de linhas alteradas entre dois arquivos:

diff -U 0 file1 file2 | grep ^@ | wc -l

Meu problema com esse comando é que, se um arquivo tiver apenas uma linha e o outro arquivo tiver 100 linhas, a saída ainda será apenas 1.

Qual comando me daria o número total de linhas alteradas, incluindo o total de linhas extras em um arquivo?

    
por Jonathan Allen Grant 10.01.2018 / 16:43

2 respostas

4

A procura por linhas que começam com @ fornece o número de blocos de alterações que diff encontraram. Eles costumavam ser mais de uma linha.

Por acaso, há uma ferramenta para contar as estatísticas de um diff: diffstat ( site , página man ).

Conte inserções e exclusões:

$ diff -u test1 test2 | diffstat
 test2 |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Combine inserções e exclusões no mesmo bloco apenas para operações únicas de "modificação":

$ diff -u test1 test2 | diffstat -m
 test2 |    2 -!
 1 file changed, 1 deletion(-), 1 modification(!)

Além disso, você pode usar diffstat -t para obter uma saída tabular de apenas o número de linhas modificadas.

Os arquivos de teste:

$ cat test1
a
b
c
d
$ cat test2
a
x
d
    
por 10.01.2018 / 17:20
-1
Cat <file1> <file2> | sort | uniq | wc -l

Isso funciona para mim

    
por 10.01.2018 / 16:57