¿Cómo puedo get la relación de diferencia usando "diff" u otro command?

Tengo dos files con miles de líneas. Quiero get su relación de diferencias en líneas / bytes usando diff , vimdiff u otros commands, incluso sin tener en count las diferencias específicas.

Hay una herramienta llamada diffstat que suena como lo que estás buscando.

 $ diff <file1> <file2> | diffstat 

Ejemplo

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

Esto se puede usar para la salida diff que también incluye múltiples files en un tree.

Referencias

  • Cómo get diff para informar el resumen de líneas nuevas, modificadas y eliminadas

Mi matemática podría estar un poco mal, pero creo que pediste una proporción, y creo que esto produce una proporción.

 #!/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.