#!/bin/bash #=============================================================================== # calculates the difference between two files #=============================================================================== # get command line arguments or print usage and die [ "$1" = "-b" ] && { binary=true ; shift; } [ $# -ne 2 ] && { echo >&2 "usage: $(basename "$0") [-b] file1 file2" echo >&2 " -b compare binary files instead of texts" exit 1 } file1="$1" file2="$2" # prepare for a diff: prepare() { if [ -n "$binary" ] then hexdump -v -e '1/1 "%0.2x\n"' else tr -d ' \t\r\n' | sed 's/\(.\)/\1\n/g' fi } # load prepared input files into memory content1=$(prepare <"$file1") content2=$(prepare <"$file2") # count number of characters in the prepares files content count1=$(echo "$content1" | wc -l) count2=$(echo "$content2" | wc -l) # diff the prepared content, grep differences and count them difference=$( diff <(echo "$content1") <(echo "$content2") | grep '^\(<\|>\)' | wc -l ) # calculate sum of characters in both files sum=$((count1 + count2)) # calculate percent of changes percent=$((difference * 100 / sum)) # print results echo "$difference/$sum $percent%" #=============================================================================== #:mode=shellscript:noTabs=false:tabSize=4:indentSize=4:lineSeparator=\n: