Como posso obter a taxa de diferença usando “diff” ou outro comando?

3

Eu tenho dois arquivos com milhares de linhas. Eu quero obter sua relação de diferenças em linhas / bytes usando diff , vimdiff ou outros comandos, mesmo independentemente das diferenças específicas.

    
por Nathaniel Ding 06.10.2014 / 04:38

2 respostas

7

Existe uma ferramenta chamada diffstat que parece com o que você está procurando.

$ diff <file1> <file2> | diffstat

Exemplo

$ diff afpuri.c afpuri1.c | diffstat
 unknown |   53 ++++++++++++++++++++---------------------------------
 1 file changed, 20 insertions(+), 33 deletions(-)

Isso pode ser usado para diff output, o que inclui vários arquivos em uma árvore também.

Referências

por 06.10.2014 / 05:05
2

Minha matemática pode estar um pouco errada, mas acredito que você pediu uma proporção, e acredito que isso produz uma relação.

#!/usr/bin/env bash
# File 1 contains 1,2,3,4,5 on new lines
# File 2 contains 1,2,3,4,5,6,7,8,9,10 on new lines.

# Compare differentials side-by-side
diff -y 1 2 > diff

# Print lines to file which do not contain ">" prefix.
sed 's/[ ]/d' diff > MATCHES

# Print lines to file which do contain ">" prefix.
sed '/[>]/!d' diff > DIFFS

# Count lines in file that contains MATCHES between Versions of Files 1,2.
MATCHES='wc -l MATCHES | sed 's/[^0-9]*//g''

# Count lines in file that DID NOT MATCH between Version of Files 1,2.
DIFFS='wc -l DIFFS | sed 's/[^0-9]*//g''

# Sed here is stripping all but the number of lines in file.

RATIO='echo "$MATCHES / $DIFFS" | bc -l '

# To get the ratio, we are echoing the #of_matches and the #of_diffs to
# the bc -l command which will give us a float, if we need it.
echo "You've got:" $RATIO "differential."

# Bytes...
# stat -c%s prints bytes to variable
MATCHES='stat -c%s MATCHES'
DIFFS='stat -c%s DIFFS'

RATIO_BYTE='echo "$MATCHES / $DIFFS" | bc -l '
echo "Let Ratio in Bytes be" $RATIO_BYTE
# Again, we divide the matches by the diffs to reach the "ratio" of
# differences between the files.
    
por 06.10.2014 / 05:11

Tags