Как отобразить наибольшую общую часть двух файлов?

Думаю, все работает

progress -w
No command currently running: cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, zcat, bzcat, lzcat, or wrong permissions.

означает, что в данный момент не запущен процесс mv,cp

возможно, файл был перемещен до того, как вы запустили прогресс -w

0
06.11.2019, 02:33
1 ответ

Этот подход основан на объединении всех различий двух файлов в единый контекст. Поэтому предполагается, что ни один из файлов не будет иметь длину более 999 999 строк.

Создайте этот скрипт как ./foo.shи chmodего 755:

#!/usr/bin/env bash

max=0   # length of the highest consecutive section found
fline=  # first line of the highest consecutive section found
tline=  # first line of the current consecutive section found
n=0     # scratch counter

while IFS= read -r line
do
    case ${line:0:1} in
    ' ')    n=$(($n+1))
            [ $n -eq    1 ] && tline="${line:1}"
            [ $n -gt $max ] && { max=$n; fline="$tline"; }
            ;;
    *)      n=0
    esac
done

printf "the largest section is %d lines starting with '%s'\n" $max "$fline"

Теперь запустите diffна своих файлах и передайте их в оболочку. Оболочка просто ищет самую длинную серию строк, начинающихся с пробела, и сообщает значение первой строки этого раздела :

.
$ diff -u999999 file1 file2 |./foo.sh 
the largest section is 3 lines starting with 'D'
0
28.01.2020, 03:08

Теги

Похожие вопросы