Filtrado de duplicados en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Bienvenido al laboratorio de filtrado de duplicados en Linux. En este laboratorio, aprenderá cómo utilizar el comando uniq en Linux, que es una herramienta esencial para filtrar datos duplicados en archivos de texto. Este comando es especialmente útil cuando se trabaja con archivos de registro, tareas de procesamiento de datos y manipulación de texto.

El objetivo de este laboratorio es enseñarle cómo identificar y eliminar líneas duplicadas de archivos de manera efectiva. Aprenderá cómo utilizar el comando uniq de forma independiente y cómo combinarlo con otros comandos como sort para lograr capacidades de filtrado más poderosas. Estas habilidades son fundamentales para administradores de sistemas, analistas de datos y cualquier persona que necesite procesar datos de texto en entornos Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/echo -.-> lab-271417{{"Filtrado de duplicados en Linux"}} linux/cat -.-> lab-271417{{"Filtrado de duplicados en Linux"}} linux/cut -.-> lab-271417{{"Filtrado de duplicados en Linux"}} linux/sort -.-> lab-271417{{"Filtrado de duplicados en Linux"}} linux/uniq -.-> lab-271417{{"Filtrado de duplicados en Linux"}} end

Comprendiendo el comando uniq

En este paso, aprenderá los conceptos básicos del comando uniq, que se utiliza para filtrar las líneas duplicadas en archivos de texto. El comando uniq es especialmente importante cuando se trabaja con registros (logs), archivos de configuración y otros datos en los que se deben identificar o eliminar duplicados.

Comencemos creando un archivo de texto de muestra con el que trabajar. Crearemos un archivo llamado duel_log.txt en el directorio ~/project:

echo -e "sword\nsword\nshield\npotion\npotion\nshield" > ~/project/duel_log.txt

Este comando crea un archivo con el siguiente contenido:

sword
sword
shield
potion
potion
shield

Note que hay líneas duplicadas en este archivo: "sword" aparece dos veces, "potion" aparece dos veces y "shield" aparece dos veces (pero no de forma consecutiva).

Ahora, usemos el comando uniq para filtrar las líneas duplicadas adyacentes:

uniq ~/project/duel_log.txt

Debería ver la siguiente salida:

sword
shield
potion
shield

Note algo interesante aquí: El comando uniq eliminó la segunda "sword" y la segunda "potion" porque eran duplicados adyacentes. Sin embargo, "shield" todavía aparece dos veces porque sus duplicados no estaban adyacentes entre sí.

Este es un concepto clave para entender: El comando uniq solo elimina las líneas duplicadas que son adyacentes entre sí (duplicados consecutivos). Si el mismo contenido aparece en otra parte del archivo, pero no es adyacente a su duplicado, uniq no lo filtrará.

Para confirmar este comportamiento, veamos el archivo original nuevamente:

cat ~/project/duel_log.txt

Compare esto con la salida del comando uniq, y podrá ver claramente que solo se eliminaron los duplicados adyacentes.

Combinando sort y uniq para la eliminación completa de duplicados

En el paso anterior, aprendiste que el comando uniq solo elimina las líneas duplicadas adyacentes. Sin embargo, en muchos escenarios del mundo real, necesitas eliminar todos los duplicados independientemente de su posición en el archivo. Para lograr esto, puedes combinar el comando sort con el comando uniq.

El comando sort ordena las líneas en orden alfabético o numérico, lo que agrupa las líneas duplicadas. Después de ordenar, todas las líneas duplicadas se vuelven adyacentes, lo que permite que el comando uniq elimine efectivamente todos los duplicados.

Comencemos creando un nuevo archivo para almacenar nuestros resultados:

touch ~/project/sorted_duel_log.txt

Ahora, usemos el comando sort para ordenar alfabéticamente las líneas de nuestro archivo original:

sort ~/project/duel_log.txt

Deberías ver la siguiente salida:

potion
potion
shield
shield
sword
sword

Fíjate cómo el comando sort ha agrupado todas las líneas duplicadas. Ahora, redirigamos esta salida ordenada al comando uniq para eliminar los duplicados:

sort ~/project/duel_log.txt | uniq

La salida debería ser:

potion
shield
sword

¡Perfecto! Ahora tenemos una lista con todos los duplicados eliminados. Guardemos esta salida en nuestro archivo sorted_duel_log.txt:

sort ~/project/duel_log.txt | uniq > ~/project/sorted_duel_log.txt

Verifiquemos el contenido de nuestro nuevo archivo:

cat ~/project/sorted_duel_log.txt

Deberías ver:

potion
shield
sword

Esta combinación de sort y uniq es una técnica poderosa para el procesamiento de datos en Linux. Te permite encontrar y eliminar eficientemente todas las entradas duplicadas en un archivo, lo cual es esencial para tareas de limpieza y análisis de datos.

Opciones avanzadas de uniq y aplicaciones prácticas

Ahora que entiendes el uso básico de uniq y cómo combinarlo con sort, exploremos algunas opciones adicionales del comando uniq que lo hacen aún más poderoso para tareas de procesamiento de datos.

Contando ocurrencias con -c

La opción -c cuenta el número de ocurrencias de cada línea. Esto es útil cuando quieres saber cuántas veces aparece cada línea única en tu archivo:

sort ~/project/duel_log.txt | uniq -c

Deberías ver una salida como esta:

      2 potion
      2 shield
      2 sword

Esto muestra que cada elemento aparece dos veces en nuestro archivo original.

Encontrando solo líneas duplicadas con -d

Si solo estás interesado en encontrar líneas duplicadas (líneas que aparecen más de una vez), puedes usar la opción -d:

sort ~/project/duel_log.txt | uniq -d

Salida:

potion
shield
sword

Dado que todos los elementos en nuestro archivo tienen duplicados, todos se listan en la salida.

Creando un archivo con solo entradas únicas

Creemos un nuevo archivo con contenido más variado para demostrar mejor el comando uniq:

echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt

Examinemos este archivo:

cat ~/project/fruits.txt

Salida:

apple
apple
apple
banana
cherry
cherry
grape

Ahora usemos la opción -u para encontrar entradas que aparecen exactamente una vez:

sort ~/project/fruits.txt | uniq -u

Salida:

banana
grape

Esto muestra que "banana" y "grape" aparecen solo una vez en nuestro archivo.

Aplicación en el mundo real: Análisis de registros (logs)

Creemos un archivo de registro (log) simple para simular una aplicación en el mundo real:

echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log

Ahora, analicemos este archivo de registro para averiguar qué tipos de mensajes aparecen y cuántas veces:

cat ~/project/system.log | sort | uniq -c

La salida debería ser similar a:

      2 ERROR: Connection failed
      2 INFO: System started
      1 INFO: User logged in
      1 WARNING: Low memory

Esto te da una visión rápida de los tipos de eventos en tu archivo de registro y sus frecuencias.

También puedes extraer solo los tipos de mensajes (INFO, ERROR, WARNING) usando el comando cut:

cat ~/project/system.log | cut -d: -f1 | sort | uniq -c

Salida:

      2 ERROR
      3 INFO
      1 WARNING

Este análisis muestra que de 6 entradas de registro, 3 son mensajes INFO, 2 son mensajes ERROR y 1 es un mensaje WARNING.

Estos ejemplos demuestran cómo combinar comandos simples como sort, uniq y cut puede crear potentes tuberías (pipelines) de procesamiento de datos en Linux.

Resumen

En este laboratorio, has aprendido cómo usar el comando uniq en Linux para filtrar líneas duplicadas en archivos de texto. Aquí están los conceptos clave y las habilidades que has desarrollado:

  1. Uso básico de uniq: Aprendiste que el comando uniq elimina las líneas duplicadas adyacentes de un archivo. Esto es útil para el filtrado básico de duplicados, pero tiene limitaciones.

  2. Combinación de sort y uniq: Descubriste que para eliminar todos los duplicados independientemente de su posición en un archivo, primero debes ordenar el archivo con el comando sort y luego filtrarlo con uniq.

  3. Opciones avanzadas de uniq:

    • La opción -c para contar las ocurrencias de cada línea
    • La opción -d para mostrar solo las líneas duplicadas
    • La opción -u para mostrar solo las líneas únicas (líneas que aparecen exactamente una vez)
  4. Aplicaciones prácticas: Viste cómo estos comandos se pueden aplicar a escenarios del mundo real, como:

    • Analizar archivos de registro (logs)
    • Encontrar y contar entradas únicas
    • Limpieza y preparación de datos

Estas habilidades son fundamentales para trabajar con datos de texto en entornos Linux y sirven como base para tareas de procesamiento de datos más avanzadas. La combinación de comandos simples como sort y uniq crea potentes tuberías (pipelines) de procesamiento de datos que pueden ayudarte a administrar y analizar datos de texto de manera eficiente.