¿Hay una manera conveniente de identificar bloques de texto duplicados o casi duplicados dentro de un archivo?
Quiero usar esto para identificar la duplicación de código. Parece que hay programas especializados con esta capacidad, pero no estoy buscando involucrarme.
Espero que haya una herramienta similar a diff que pueda hacer una especie de diff "dentro de un archivo". Aún mejor sería un vimdiff dentro de un solo archivo.
text-processing
diff
vimdiff
Praxeolítico
fuente
fuente
vimdiff
no hace por ti aquí?Respuestas:
Si hacer la comparación línea por línea es aceptable, lo siguiente le dirá qué líneas están duplicadas en el archivo
text
y cuántas veces aparece cada una:Como ejemplo,
Usando las herramientas habituales de Unix, esto podría extenderse, suponiendo que el formato de prueba de entrada no sea demasiado complejo, para comparaciones de párrafo por párrafo o de oración por oración.
Encontrar párrafos repetidos
Supongamos que nuestro archivo
text
contiene:El siguiente comando identifica muestra qué párrafos aparecen más de una vez:
Esto se usa
awk
para dividir el texto en párrafos (delineados por líneas en blanco), convierte las nuevas líneas en espacios y luego pasa la salida, una línea por párrafo, para ordenar y unificar para contar párrafos duplicados.Lo anterior fue probado con GNU
awk
. Para otrosawk
, el método para definir líneas en blanco como límites de párrafo (registro) puede diferir.fuente