ocehb: (Default)
ocehb ([personal profile] ocehb) wrote2006-07-13 12:12 pm
Entry tags:

И еще задачка из яндекса

Как сравнить (просто узнать совпадают или не совпадают, список различий получать не требуется) два очень больших (таких, что команда diff говорит "memory exhausted" :) текстовых файла?


Если места на диске хватает:

split -l102400 A A.
split -l102400 B B.
for i in A.*; do
    diff -q $i B.${i##*.} || break
done
rm -f A.* B.*


Если места мало:

a=0
while true; do
    dd if=A of=A.out count=1024 skip=$[$a*1024]
    dd if=B of=B.out count=1024 skip=$[$a*1024]
    [ ! -s A.out -a ! -s B.out ] && break
    diff -q A.out B.out || break
    a=$[$a+1]
done
rm -f A.out B.out