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.txtEn 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.txtSuponiendo 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