uniq: comando Linux para buscar texto duplicado
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