heuristicamente descubra quão diferente é um conjunto de arquivos

4

Estou tendo um grande número de arquivos de saída produzidos por execuções repetidas de um conjunto de testes e gostaria de ver, aproximadamente, o quão diferentes eles são. Idealmente, todos devem ser idênticos (indicando um teste totalmente reprodutível) ou quase idênticos (por exemplo, se os registros de data e hora estiverem presentes). Então estou procurando um script como:

show-greatest-diff /path/to/files/*.out

Assim, se os arquivos 100 * .out estiverem presentes, o script deve diff todos eles e talvez produza o número máximo de linhas / caracteres que qualquer par entre eles diferem (e talvez identifique o par mais diferente) ou basta imprimir a saída diff do par que difere mais ou produzir alguma outra saída heuristicamente útil.

A solução sugerida aqui não é apropriada para o meu caso de uso devido ao grande número de arquivos.

    
por Marcus Junius Brutus 24.04.2014 / 13:31

1 resposta

5

Que tal algo como

mostdifs=-1;
for f1 in path/to/files/*.out; do 
    for f2 in path/to/files/*.out; do 
        difs=$(diff "$f1" "$f2" | wc -l); 
        [ "$difs" -gt "$mostdifs" ] && mostdifs=$difs && mostdif="$f1 : $f2";
    done 
done 
echo "$mostdif"

Isto é muito simplista, você poderia melhorá-lo testando se $f1 é o mesmo arquivo que $f2 e por vários outros ajustes, mas se estamos falando de algumas centenas de arquivos de texto, ele será executado em segundos. a complexidade extra pode não valer a pena.

A ideia é executar diff em cada par de arquivos e examinar o número de linhas retornadas. Se esse número for maior que o maior atual, salve os nomes dos arquivos.

    
por 24.04.2014 / 14:08