Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
Bucle bash anidado para ejecutar solo una vez

Necesito crear varios archivos con contenido como este a continuación y sustituir el valor por otros 3 archivos diferentes.

 name: url: description:

Traté de agregar valores al contenido anterior usando while loop pero se ejecutó con una combinación de 3^3, en realidad lo que necesito es crear un archivo con la primera línea de los 3 archivos sustituidos y un segundo archivo con la segunda línea de los 3 archivos sustituidos y así.

Este es el código que usé.

 while read line1; do while read line2; do while read line3; do echo " name: $line1 url: $line2 description: $line3 " > $line1.txt ; done < url.txt done < description.txt done < name.txt
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En un bucle anidado, cada bucle procesará todo el archivo de una sola vez, lo que dará como resultado una salida desincronizada.

En su lugar, debe leer los 3 archivos en un solo ciclo while, utilizando descriptores de archivos adicionales para procesar los otros archivos:

 while read name && read description <&3 && read url <&4; do echo " name: $name url: $url description: $description " > $name.txt done < name.txt 3< description.txt 4< url.txt
over 4 years ago · Santiago Trujillo Denunciar

0

Suponiendo que los archivos name.txt , url.txt y description.txt tengan el mismo número de líneas, esta tarea podría realizarse utilizando las utilidades paste y sed :

 paste -d '\n' name.txt url.txt description.txt | sed 'N;N;s/\(.*\n\)\(.*\n\)/name: \1url: \2description: /'

o, si los archivos no son demasiado grandes, una solución bash alternativa podría ser:

 #!/bin/bash mapfile names < name.txt mapfile urls < url.txt mapfile descs < description.txt for ((i = 0; i < ${#names[@]}; ++i)); do printf 'name: %surl: %sdescription: %s' \ "${names[i]}" "${urls[i]}" "${descs[i]}" done
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda