Como determinar se o arquivo é apenas uma permutação de outro?

4

Considere, por exemplo, um arquivo de código-fonte, onde as funções são drasticamente embaralhadas. Existe um comando para verificar se a reordenação das linhas é a única mudança?

(isso significa que nenhuma linha é adicionada, removida ou alterada)

    
por maxschlepzig 20.09.2011 / 16:07

2 respostas

9

A resposta simples é: "compare a versão ordenada de ambos os arquivos". Em bash :

diff <(sort file1) <(sort file2)

Obviamente, isso não significa que os dois arquivos tenham a mesma semântica que os arquivos de origem de uma linguagem de programação (supondo que estejam sintaticamente corretos).

    
por 20.09.2011 / 16:23
4

Eu menciono este aqui apenas porque eu quero que alguém escreva uma versão GNU ...

Brenda S. Baker , anteriormente do Bell Labs, escreveu um sistema chamado dup que fez o que você quer fazer e muito mais. Você poderia usar o dup para comparar dois sistemas de linguagem C e encontrar o código que é meio duplicado: uma função copiada e variáveis renomeadas ou algumas mudanças menores.

Todo o SCOg Fiasco poderia ter sido evitado se uma pessoa ética da SCO tivesse comparado a fonte do Linux com a "propriedade intelectual" da The Precious SCO.

    
por 20.09.2011 / 16:54