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 (
gedito 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.txto créalo si es necesario: - Revisa su contenido con
cat: - En lugar de usar archivos intermedios para transformar el texto, conecta
catdirectamente contrusando una tubería (|) para cambiar las letras 'a' por 'p': - Conecta la salida de
catcon el comandowc -lmediante una tubería para contar las líneas del archivo:
echo "esto es una prueba" > documento1.txt
echo "aquí hay menos pruebas" >> documento1.txt
cat documento1.txt
cat documento1.txt | tr a p
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 contry cuenta las líneas resultantes conwc -l: - Comprueba cómo los datos fluyen de forma secuencial de un comando a otro sin necesidad de crear archivos temporales.
cat documento1.txt | tr a m | wc -l
Fase 3: Creación de un conjunto de datos para filtrado
- Abre el editor de texto desde la terminal o crea un archivo llamado
nombresdirectamente: - Introduce los siguientes nombres en el archivo (asegúrate de incluir los nombres repetidos de forma consecutiva):
- Guarda el archivo con el nombre
nombresy ciérralo. - Comprueba el contenido desde la terminal:
gedit nombres &
antonio antonio jose jose pedro maria tomas tomas tomas juan
cat nombres
Fase 4: Filtrado de datos duplicados con uniq
- Envía el contenido de
nombresal filtrouniqmediante una tubería para obtener solo los registros únicos: - Observa que se eliminan los elementos repetidos consecutivos, mostrando solo una ocurrencia de cada nombre.
- Utiliza la opción
-cdeuniqpara mostrar el número de apariciones de cada registro: - Utiliza la opción
-dpara mostrar únicamente las líneas que se encuentran duplicadas en el archivo: - Guarda el resultado de los nombres duplicados en un nuevo archivo llamado
repetidos.txtcombinando tuberías y redirecciones: - Verifica el contenido guardado en
repetidos.txt: - Limpia la terminal con:
cat nombres | uniq
cat nombres | uniq -c
cat nombres | uniq -d
cat nombres | uniq -d > repetidos.txt
cat repetidos.txt
clear
Preguntas de reflexión:
- ¿Qué es una tubería (pipe) en Linux y qué símbolo se utiliza para representarla en la línea de comandos?
- ¿En qué se diferencia el uso de una tubería (
|) frente al operador de redirección de salida (>)? - ¿Qué es un pipeline o línea de tuberías y cuántos comandos se pueden encadenar en él?
- ¿Qué es un comando de tipo "filtro" en Linux y por qué son especialmente útiles al trabajar con tuberías?
- ¿Cuál es la función principal del comando
uniq? - ¿Por qué es requisito fundamental que los datos estén agrupados u ordenados consecutivamente antes de aplicar el comando
uniq? - ¿Qué información adicional proporciona el parámetro
-cal utilizarse conuniq? - ¿Qué resultado obtenemos al ejecutar
uniq -dsobre un flujo de datos? - ¿Cómo afecta la sensibilidad a mayúsculas y minúsculas (case sensitivity) de Linux al comportamiento de
uniq? - ¿Cómo podemos combinar en una sola línea de comandos una tubería para filtrar datos con
uniqy 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:
- Rellena los campos y responde en este formulario desde tu navegador.
- Pulsa el botón de imprimir al final de la página.
- Selecciona "Guardar como PDF" en el diálogo de impresión.
- Entrega el archivo PDF en el aula virtual.
Alumno/a: Fecha:
Grupo:
Completa la ficha realizando las siguientes actividades:
- Conecta comandos simples mediante una tubería (
|).
Escribe el comando para enviar la salida decat documento1.txthaciatrreemplazando '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:
- Construye un pipeline encadenando múltiples comandos.
Escribe la orden para encadenarcat,tr(reemplazando 'a' por 'm') ywc -l:
Copia el resultado devuelto por la terminal:
Explica el recorrido de los datos a lo largo de la línea de tuberías:
- Filtra líneas duplicadas consecutivas con el comando
uniq.
Escribe el comando para mostrar los registros únicos del archivonombresmediante una tubería:
Copia la lista de nombres resultante mostrada en la terminal:
Explica qué ha hecho el filtrouniqcon los nombres repetidos:
- 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:
- Aísla registros repetidos y guárdalos en un fichero de salida.
Escribe el comando para obtener solo los nombres duplicados y guardarlos enrepetidos.txt:
Copia el contenido final verificado dentro derepetidos.txt:
Explica cómo trabajan conjuntamente el filtrouniq -dy el operador>en esta orden: