El comando uniq (único) es una herramienta esencial para el procesamiento de texto en Linux. Te ayuda a filtrar y gestionar líneas duplicadas dentro de un archivo de texto, pero es importante entender cómo funciona para usarlo eficazmente.
Eliminación Básica de Duplicados
La función principal del comando uniq es eliminar líneas adyacentes duplicadas. Imagina que tienes un archivo llamado reading.txt con el siguiente contenido:
book
book
paper
paper
article
article
magazine
Para eliminar las líneas repetidas, puedes ejecutar el comando uniq:
$ uniq reading.txt
book
paper
article
magazine
Como puedes ver, uniq muestra una versión del archivo con las líneas adyacentes duplicadas eliminadas.
Opciones Avanzadas de Filtrado
El comando uniq también proporciona varias opciones para un análisis más detallado.
Para contar las ocurrencias de cada línea, usa la bandera -c (count/contar):
$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine
Para mostrar solo las líneas que no se repiten (es decir, que son únicas), usa la bandera -u (unique/único):
$ uniq -u reading.txt
magazine
Por el contrario, para mostrar solo las líneas que están duplicadas, usa la bandera -d (duplicated/duplicado):
$ uniq -d reading.txt
book
paper
article
La Importancia de Ordenar (Sort)
Un detalle crítico sobre el comando uniq linux es que solo detecta líneas duplicadas si son directamente adyacentes entre sí. Si los duplicados están dispersos por el archivo, uniq no los identificará.
Considera esta versión de reading.txt donde los duplicados no son adyacentes:
book
paper
book
paper
article
magazine
article
Ejecutar uniq en este archivo producirá un resultado sorprendente:
$ uniq reading.txt
book
paper
book
paper
article
magazine
article
No se eliminó ninguna línea porque ninguna línea idéntica estaba una al lado de la otra. Para solucionar esto, primero debes ordenar el contenido del archivo. Al canalizar (pipe) la salida de sort hacia uniq, te aseguras de que todas las líneas idénticas se vuelvan adyacentes, permitiendo que uniq funcione correctamente. Esta combinación es un patrón poderoso y común en la programación de shell.
$ sort reading.txt | uniq
article
book
magazine
paper
Este comando primero ordena las líneas alfabéticamente y luego uniq filtra los duplicados, dándote una lista limpia de entradas únicas.