
Ich habe zwei Dateien mit Tausenden von Zeilen. Ich möchte das Verhältnis der Differenzen in Zeilen/Bytes ermitteln mitUnterschied,Abonnierenoder andere Befehle, auch unabhängig von den spezifischen Unterschieden.
Antwort1
Es gibt ein Tool namens „ diffstat
, das klingt nach dem, was Sie suchen.“
$ diff <file1> <file2> | diffstat
Beispiel
$ diff afpuri.c afpuri1.c | diffstat
unknown | 53 ++++++++++++++++++++---------------------------------
1 file changed, 20 insertions(+), 33 deletions(-)
diff
Dies kann auch für Ausgaben verwendet werden , die mehrere Dateien in einem Baum enthalten.
Verweise
Antwort2
Meine Berechnungen sind vielleicht nicht ganz richtig, aber ich glaube, Sie haben nach einem Verhältnis gefragt, und ich glaube, dies ergibt ein Verhältnis.
#!/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.