uniq: comando Linux para buscar texto duplicado

enero 23, 2022 , 0 Comments

En ocasiones, es probable que tengas ficheros de texto muy largos entre los que es complicado buscar ciertos patrones o líneas o palabras que se encuentran duplicadas, o tal vez haya un montón de ficheros de texto de pequeño tamaño donde deseas buscar coincidencias de una forma más sencilla, e incluso usar una pipe y buscar coincidencias en la salida de un comando. Pues bien, uniq es el comando que estás buscando para ello.

Con uniq podrás buscar información redundante de forma muy sencilla. Además, también te permitirá eliminar esos duplicados si lo necesitas. Y, en este tutorial, podrás ver algunos ejemplos del comando que te pueden resultar prácticos. Recuerda que está instalado por defecto en la gran mayoría de distros, por lo que no tendrás que instalar el paquete…

Bien, antes de nada, veamos un ejemplo para entender bien la base de funcionamiento del comando uniq y qué hace y qué no hace. Por ejemplo, imagina que creas un fichero de texto llamado prueba.txt, y dentro pones varias frases o palabras repetidas, como por ejemplo repetir tres líneas «Hola, esto es una prueba» y luego usas uniq con él:


nano prueba.txt

uniq prueba.txt

Pues bien, en ese caso, la salida del comando será simplemente:


Salida:

Hola, esto es una prueba

Es decir, poner una sola línea «Hola, esto es una prueba» eliminando las otras 2 que son iguales. Pero ojo, si vuelves a usar cat para ver el original, verás que no se han eliminado del fichero, simplemente las ha eliminado de la salida:


cat prueba.txt

Cuya salida sería:


Hola, esto es una prueba

Hola, esto es una prueba

Hola, esto es una prueba

Pero el comando uniq tiene muchas más opciones disponibles. Por ejemplo, te puede decir la cantidad de veces que se repite una línea, indicando al principio de la línea el número de repeticiones. Para ello:


uniq -c prueba.txt

También podrías simplemente imprimir en pantalla las líneas repetidas, y obviar las no repetidas:


uniq -d prueba.txt

O las que no están duplicadas con la opción -u:


uniq -u prueba.txt

Para usar case-sentitive y diferenciar entre mayúsculas y minúsculas, puedes usar la opción -i:


uniq -i prueba.txt

Bien, y cómo se podría hacer para crear un fichero solo con las líneas únicas, eliminando de una vez todas las repetidas. Pues es tan sencillo como usar una tubería para canalizar la salida de uniq a un fichero de texto nuevo:


uniq prueba.txt > unicas.txt


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.