-->

Tuberías (Pipes), Filtros de Texto y Comando Uniq

Objetivo:

Aprender a conectar comandos mediante tuberías (| o pipes) para canalizar el flujo de datos y aplicar filtros como uniq con sus opciones (-c y -d) para la eliminación, recuento y detección de líneas duplicadas en Linux.

Escenario:

  • Herramientas: Terminal de Linux, editor de texto (gedit o similar) y un sistema Debian o basado en Debian.
  • Conceptos clave: Tuberías / Pipelines (|), filtros de texto, encadenamiento de comandos, eliminación de duplicados (uniq), recuento de frecuencia (uniq -c), aislamiento de duplicados (uniq -d) y sensibilidad a mayúsculas/minúsculas (case sensitivity).

Instrucciones:

Fase 1: Tuberías sencillas (|)

  • Abre la terminal de Linux.
  • Verifica la existencia del archivo documento1.txt o créalo si es necesario:
  • echo "esto es una prueba" > documento1.txt
    echo "aquí hay menos pruebas" >> documento1.txt
  • Revisa su contenido con cat:
  • cat documento1.txt
  • En lugar de usar archivos intermedios para transformar el texto, conecta cat directamente con tr usando una tubería (|) para cambiar las letras 'a' por 'p':
  • cat documento1.txt | tr a p
  • Conecta la salida de cat con el comando wc -l mediante una tubería para contar las líneas del archivo:
  • cat documento1.txt | wc -l

Fase 2: Construcción de una línea de tuberías (Pipeline)

  • Encadena tres comandos consecutivos mediante múltiples tuberías: visualiza el contenido con cat, reemplaza letras con tr y cuenta las líneas resultantes con wc -l:
  • cat documento1.txt | tr a m | wc -l
  • Comprueba cómo los datos fluyen de forma secuencial de un comando a otro sin necesidad de crear archivos temporales.

Fase 3: Creación de un conjunto de datos para filtrado

  • Abre el editor de texto desde la terminal o crea un archivo llamado nombres directamente:
  • gedit nombres &
  • Introduce los siguientes nombres en el archivo (asegúrate de incluir los nombres repetidos de forma consecutiva):
  • antonio
    antonio
    jose
    jose
    pedro
    maria
    tomas
    tomas
    tomas
    juan
  • Guarda el archivo con el nombre nombres y ciérralo.
  • Comprueba el contenido desde la terminal:
  • cat nombres

Fase 4: Filtrado de datos duplicados con uniq

  • Envía el contenido de nombres al filtro uniq mediante una tubería para obtener solo los registros únicos:
  • cat nombres | uniq
  • Observa que se eliminan los elementos repetidos consecutivos, mostrando solo una ocurrencia de cada nombre.
  • Utiliza la opción -c de uniq para mostrar el número de apariciones de cada registro:
  • cat nombres | uniq -c
  • Utiliza la opción -d para mostrar únicamente las líneas que se encuentran duplicadas en el archivo:
  • cat nombres | uniq -d
  • Guarda el resultado de los nombres duplicados en un nuevo archivo llamado repetidos.txt combinando tuberías y redirecciones:
  • cat nombres | uniq -d > repetidos.txt
  • Verifica el contenido guardado en repetidos.txt:
  • cat repetidos.txt
  • Limpia la terminal con:
  • clear

Preguntas de reflexión:

  1. ¿Qué es una tubería (pipe) en Linux y qué símbolo se utiliza para representarla en la línea de comandos?
  2. ¿En qué se diferencia el uso de una tubería (|) frente al operador de redirección de salida (>)?
  3. ¿Qué es un pipeline o línea de tuberías y cuántos comandos se pueden encadenar en él?
  4. ¿Qué es un comando de tipo "filtro" en Linux y por qué son especialmente útiles al trabajar con tuberías?
  5. ¿Cuál es la función principal del comando uniq?
  6. ¿Por qué es requisito fundamental que los datos estén agrupados u ordenados consecutivamente antes de aplicar el comando uniq?
  7. ¿Qué información adicional proporciona el parámetro -c al utilizarse con uniq?
  8. ¿Qué resultado obtenemos al ejecutar uniq -d sobre un flujo de datos?
  9. ¿Cómo afecta la sensibilidad a mayúsculas y minúsculas (case sensitivity) de Linux al comportamiento de uniq?
  10. ¿Cómo podemos combinar en una sola línea de comandos una tubería para filtrar datos con uniq y una redirección para almacenar el resultado en un archivo?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué es una tubería (pipe) en Linux y qué símbolo se utiliza para representarla en la línea de comandos?

Es un mecanismo que permite redirigir la salida estándar (stdout) de un comando directamente hacia la entrada estándar (stdin) de otro comando. Se representa mediante la barra vertical (|).


2. ¿En qué se diferencia el uso de una tubería (|) frente al operador de redirección de salida (>)?

El operador > envía la salida de un comando hacia un archivo en el disco, mientras que la tubería | envía la salida de un comando hacia otro comando para ser procesada en memoria sin crear archivos intermedios.


3. ¿Qué es un pipeline o línea de tuberías y cuántos comandos se pueden encadenar en él?

Es una secuencia de dos o más comandos conectados mediante tuberías donde la salida de cada uno pasa a ser la entrada del siguiente. Se pueden encadenar tantos comandos como sean necesarios para procesar la información.


4. ¿Qué es un comando de tipo "filtro" en Linux y por qué son especialmente útiles al trabajar con tuberías?

Es un comando que recibe datos por la entrada estándar, realiza alguna transformación o selección sobre ellos (como contar, buscar, cortar u ordenar) y devuelve el resultado por la salida estándar. Son ideales para tuberías porque están diseñados para procesar flujos de texto continuo.


5. ¿Cuál es la función principal del comando uniq?

Su función es reportar o eliminar las líneas consecutivas que estén repetidas dentro de un texto o flujo de entrada, dejando únicamente una muestra única de cada una.


6. ¿Por qué es requisito fundamental que los datos estén agrupados u ordenados consecutivamente antes de aplicar el comando uniq?

Porque uniq solo compara líneas adyacentes (una inmediatamente debajo de la otra). Si una línea repetida aparece separada en otra parte del archivo, uniq no la detectará a menos que se haya ordenado previamente (por ejemplo, con el comando sort).


7. ¿Qué información adicional proporciona el parámetro -c al utilizarse con uniq?

El parámetro -c (count) antepone a cada línea de la salida el número de veces que dicha línea aparecía repetida de forma consecutiva en la entrada.


8. ¿Qué resultado obtenemos al ejecutar uniq -d sobre un flujo de datos?

El parámetro -d (repeated/duplicates) hace que uniq muestre exclusivamente las líneas que están repetidas, ignorando todas aquellas que son totalmente únicas.


9. ¿Cómo afecta la sensibilidad a mayúsculas y minúsculas (case sensitivity) de Linux al comportamiento de uniq?

Linux diferencia entre mayúsculas y minúsculas, por lo que cadenas como "Antonio" y "antonio" son tratadas como líneas distintas y no se considerarán duplicadas por defecto.


10. ¿Cómo podemos combinar en una sola línea de comandos una tubería para filtrar datos con uniq y una redirección para almacenar el resultado en un archivo?

Se utiliza la tubería | para pasar la salida del comando de lectura/procesado a uniq y, al final de la instrucción, se usa el operador > para dirigir el resultado filtrado al archivo de destino (ejemplo: cat nombres | uniq -d > repetidos.txt).


Ficha de Laboratorio: Tuberías (Pipes), Filtros de Texto y Comando Uniq

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Conecta comandos simples mediante una tubería (|).
    Escribe el comando para enviar la salida de cat documento1.txt hacia tr reemplazando 'a' por 'p':

    Copia la salida obtenida por pantalla:

    Explica cuál es la ventaja de usar una tubería en lugar de crear un archivo intermedio:
  2. Construye un pipeline encadenando múltiples comandos.
    Escribe la orden para encadenar cat, tr (reemplazando 'a' por 'm') y wc -l:

    Copia el resultado devuelto por la terminal:

    Explica el recorrido de los datos a lo largo de la línea de tuberías:
  3. Filtra líneas duplicadas consecutivas con el comando uniq.
    Escribe el comando para mostrar los registros únicos del archivo nombres mediante una tubería:

    Copia la lista de nombres resultante mostrada en la terminal:

    Explica qué ha hecho el filtro uniq con los nombres repetidos:
  4. Cuenta la frecuencia de cada registro con uniq -c.
    Escribe la orden para contar el número de repeticiones de cada nombre mediante tuberías:

    Copia la salida devuelta por la terminal:

    Explica qué representa el número que aparece antes de cada nombre:
  5. Aísla registros repetidos y guárdalos en un fichero de salida.
    Escribe el comando para obtener solo los nombres duplicados y guardarlos en repetidos.txt:

    Copia el contenido final verificado dentro de repetidos.txt:

    Explica cómo trabajan conjuntamente el filtro uniq -d y el operador > en esta orden: