Existe-t-il un moyen pratique d'identifier les blocs de texte en double ou presque en double dans un fichier?
Je veux l'utiliser pour identifier la duplication de code. Il semble qu'il existe des programmes spécialisés avec cette capacité, mais je ne cherche pas à y participer.
J'espère qu'il existe un outil similaire à diff qui peut faire une sorte de diff "dans un fichier". Encore mieux serait un vimdiff dans un seul fichier.
text-processing
diff
vimdiff
Praxéolitique
la source
la source
vimdiff
vous convient pas ici?Réponses:
Si faire la comparaison ligne par ligne est acceptable, alors ce qui suit indiquera quelles lignes sont dupliquées dans le fichier
text
et combien de fois chacune apparaît:Par exemple,
En utilisant les outils Unix habituels, cela pourrait être étendu, en supposant que le format de test d'entrée n'est pas trop complexe, aux comparaisons paragraphe par paragraphe ou phrase par phrase.
Recherche de paragraphes répétés
Supposons que notre fichier
text
contienne:La commande suivante identifie les paragraphes qui apparaissent plusieurs fois:
Cela permet
awk
de décomposer le texte en paragraphes (délimités par des lignes vides), de convertir les sauts de ligne en espaces, puis de passer la sortie, une ligne par paragraphe, pour trier et uniq pour compter les paragraphes dupliqués.Ce qui précède a été testé avec GNU
awk
. Pour les autresawk
, la méthode de définition des lignes vierges comme limites de paragraphe (enregistrement) peut différer.la source