Introducción
Los archivos de texto pueden relacionarse de distintas maneras. A veces es necesario normalizar caracteres; otras veces, dos archivos se corresponden por la posición de sus líneas; en otros casos, los registros comparten una clave. Elegir la herramienta adecuada es más importante que memorizar sus opciones.
En este laboratorio conocerá tres herramientas específicas: tr transforma un flujo de caracteres, paste combina líneas según su posición y join combina registros ordenados mediante un campo compartido. Observará cada entrada y verificará el archivo resultante antes de crear un pequeño informe.
Traducir y limpiar un flujo de caracteres
En este paso, utilizará tr para traducir caracteres, agrupar separadores repetidos y eliminar caracteres no deseados.
Cree una línea deliberadamente inconsistente. A continuación, cat -A hará visibles detalles que normalmente no se muestran: los espacios seguirán siendo visibles como separaciones y $ marcará el final de la línea. Esto le ayudará a ver exactamente qué debe limpiar:
cd /home/labex/project/text-combine-lab
printf ' API,,,Worker,,WEB \n' > raw-services.txt
cat -A raw-services.txt
tr SET1 SET2 reemplaza los caracteres del primer conjunto por los caracteres correspondientes del segundo. Las clases portables [:upper:] y [:lower:] representan letras mayúsculas y minúsculas:
tr '[:upper:]' '[:lower:]' < raw-services.txt
Ahora conecte tres etapas mediante una canalización. La primera traduce el uso de mayúsculas y minúsculas; tr -s ',' agrupa cada secuencia de comas repetidas en una sola coma; tr -d ' ' elimina los caracteres de espacio; y tee muestra y guarda el flujo final:
tr '[:upper:]' '[:lower:]' < raw-services.txt | tr -s ',' | tr -d ' ' | tee clean-services.txt
El resultado debe ser api,worker,web. tr lee un flujo; no modifica el archivo de entrada directamente.
Combinar líneas correspondientes con Paste
En este paso, combinará archivos cuyas primeras líneas se corresponden, cuyas segundas líneas se corresponden, y así sucesivamente.
Cree una columna con nombres de servicios y otra con sus responsables:
cd /home/labex/project/text-combine-lab
printf '%s\n' api worker web > services.txt
printf '%s\n' team-blue team-green team-blue > owners.txt
paste coloca las líneas correspondientes una junto a otra y utiliza una tabulación de forma predeterminada:
paste services.txt owners.txt
Elija la coma como delimitador con -d, y use tee para mostrar y guardar un archivo similar a un archivo CSV:
paste -d, services.txt owners.txt | tee service-owners.csv
paste no compara claves. Si a un archivo le faltan líneas o sus líneas están reordenadas, la correspondencia cambiará.
Unir registros mediante una clave compartida
En este paso, combinará registros mediante un primer campo coincidente, en lugar de hacerlo según la posición de las líneas.
Cree dos tablas delimitadas por espacios y con órdenes diferentes:
cd /home/labex/project/text-combine-lab
printf '%s\n' 'web 8080' 'api 9000' 'worker 9100' > ports-unsorted.txt
printf '%s\n' 'worker active' 'web active' 'api maintenance' > states-unsorted.txt
join espera que ambas entradas estén ordenadas por el campo de unión. Prepare copias ordenadas. En sort -k1,1, -k selecciona una clave y 1,1 significa «comenzar y terminar con el campo 1», por lo que solo el nombre del servicio determina el orden:
sort -k1,1 ports-unsorted.txt > ports.txt
sort -k1,1 states-unsorted.txt > states.txt
Inspeccione los archivos y, después, una los valores coincidentes del campo 1:
cat ports.txt
cat states.txt
join ports.txt states.txt | tee service-details.txt
Cada resultado contiene una sola vez la clave de servicio compartida, seguida del puerto y del estado.
Crear un informe de servicios legible
En este paso, cambiará la estructura de los registros unidos sin modificar las tablas de origen.
Convierta los espacios en comas para producir un informe sencillo:
cd /home/labex/project/text-combine-lab
tr ' ' ',' < service-details.txt | tee service-report.csv
Añada un encabezado agrupando dos comandos. Las llaves envían la salida de ambos comandos a una única redirección:
{ echo 'service,port,state'; cat service-report.csv; } > service-report-with-header.csv
cat service-report-with-header.csv
Cuente los registros de datos sin contar el encabezado:
tail -n +2 service-report-with-header.csv | wc -l | tr -d ' ' > service-count.txt
cat service-count.txt
Este flujo de trabajo conserva etapas pequeñas y fáciles de inspeccionar: datos normalizados, datos unidos, datos formateados y, finalmente, el informe.
Resumen
Utilizó tr para la normalización a nivel de caracteres, paste para crear columnas según la posición y join para establecer relaciones mediante claves ordenadas. Después, combinó estas etapas pequeñas en un informe CSV legible y mantuvo intactos los archivos de entrada originales.



