Existe uma maneira conveniente de identificar blocos duplicados ou quase duplicados de texto em um arquivo?
Eu quero usar isso para identificar a duplicação de código. Parece que existem programas especiais com esse recurso, mas não pretendo envolvê-lo.
Espero que exista uma ferramenta semelhante ao diff que possa fazer uma espécie de diff "dentro de um arquivo". Melhor ainda seria um vimdiff em um único arquivo.
text-processing
diff
vimdiff
Praxeolitic
fonte
fonte
vimdiff
faz por você aqui?Respostas:
Se a comparação linha por linha for aceitável, o seguinte dirá quais linhas são duplicadas no arquivo
text
e quantas vezes cada uma aparece:Como um exemplo,
Usando as ferramentas usuais do unix, isso pode ser estendido, assumindo que o formato do teste de entrada não seja muito complexo, para comparações parágrafo por parágrafo ou sentença por sentença.
Localizando parágrafos repetidos
Suponha que nosso arquivo
text
contenha:O comando a seguir identifica mostra quais parágrafos aparecem mais de uma vez:
Isso é usado
awk
para dividir o texto em parágrafos (delineados por linhas em branco), converte as novas linhas em espaços e passa a saída, uma linha por parágrafo, para classificar e uniq para contar parágrafos duplicados.O acima foi testado com GNU
awk
. Para outrosawk
, o método para definir linhas em branco como limites de parágrafo (registro) pode ser diferente.fonte