El comando uniq en Linux: eliminar líneas duplicadas

Introducción

En el mundo de la administración de sistemas y el procesamiento de texto, el comando uniq es una herramienta esencial para identificar y eliminar líneas duplicadas en archivos ordenados. Aunque su funcionamiento parece sencillo, su poder se revela cuando se combina con otras utilidades como sort, grep o awk. En este artículo exploraremos en profundidad cómo funciona uniq, sus opciones más útiles y ejemplos prácticos que puedes aplicar inmediatamente en tu flujo de trabajo diario.

¿Qué es uniq y cuándo usarlo?

El nombre uniq proviene de “unique” (único). Su misión principal es leer una entrada de texto línea por línea y, siempre que las líneas estén adyacentes e idénticas, mostrar solo una copia. Esto significa que, para que uniq actúe correctamente, el archivo de entrada debe estar previamente ordenado; de lo contrario, las duplicaciones separadas no serán detectadas. Es muy útil en logs, archivos de configuración, listas de usuarios o cualquier escenario donde necesites depurar datos repetidos.

Sintaxis básica

La forma más simple de invocar uniq es:

uniq [opciones] archivo

Si no se especifica un archivo, el comando lee desde la entrada estándar, lo que permite encadenarlo fácilmente con tuberías (|). Por ejemplo:

sort archivo.txt | uniq

Ordena el contenido y, a continuación, elimina las repeticiones adyacentes.

Opciones más utilizadas

  • -c: antepone a cada línea el número de veces que aparece.
  • -d: muestra únicamente las líneas que están duplicadas (una copia de cada conjunto).
  • -u: muestra únicamente las líneas que no se repiten (únicas).
  • -i: ignora mayúsculas y minúsculas al comparar.
  • -f N: omite los primeros N campos al comparar (útil con archivos delimitados).
  • -s N: omite los primeros N caracteres de cada línea.
  • -w N: compara solo los primeros N caracteres de cada línea.

Ejemplos prácticos

1. Eliminar duplicados simples

Supongamos un archivo nombres.txt con la siguiente lista (ya ordenada):

Ana
Ana
Luis
Luis
Luis
María

Ejecutamos:

uniq nombres.txt

Resultado:

Ana
Luis
María

2. Contar ocurrencias

Para saber cuántas veces aparece cada nombre:

uniq -c nombres.txt

Salida:

      2 Ana
      3 Luis
      1 María

3. Mostrar solo los duplicados

Si nos interesan únicamente los nombres que se repiten:

uniq -d nombres.txt

Resultado:

Ana
Luis

4. Ignorar mayúsculas/minúsculas

Con un archivo que tenga variaciones de caso:

ana
ANA
Luis
luis
María

Primero ordenamos sin distinguir caso y luego aplicamos uniq -i:

sort -f nombres.txt | uniq -i

Obtendremos una única entrada por cada nombre sin importar mayúsculas.

Combinando uniq con otros comandos

El verdadero potencial de uniq se manifiesta en tuberías. Algunos patrones comunes:

  • cat archivo | sort | uniq -c | sort -nr: cuenta frecuencias y ordena de mayor a menor.
  • grep "error" log.txt | sort | uniq -c: cuántas veces aparece cada mensaje de error.
  • cut -d: -f1 /etc/passwd | sort | uniq -d: detecta usuarios duplicados en el archivo de contraseñas (útil para auditorías de seguridad).

Consejos y trucos

  • Siempre ordena antes de usar uniq a menos que estés seguro de que el archivo ya está ordenado.
  • Usa uniq -z si trabajas con entradas separadas por null (útil con find -print0).
  • Combina awk para hacer un uniq personalizado cuando necesitas comparar solo ciertos campos.
  • En scripts, verifica el código de salida: uniq devuelve 0 si tuvo éxito y 1 si hubo errores de escritura.

Conclusión

El comando uniq es una pieza pequeña pero poderosa del arsenal de cualquier administrador Linux o amante de la línea de comandos. Su simplicidad oculta una gran versatilidad, especialmente cuando se combina con herramientas de ordenado y filtrado. Dominar sus opciones te permitirá depurar logs, limpiar listas y realizar análisis de datos de forma rápida y eficiente. La próxima vez que te encuentres frente a un archivo con líneas repetidas, recuerda que uniq está listo para dejarlo limpio y ordenado.