while
tiene una sintaxis interesante. Puede poner varios comandos antes del do ... while
ciclo, y el caso en cuestión puede necesitar hacer malabares con esta función, dependiendo de sus requisitos particulares de: ¿lee al final del archivo más largo o solo al final del más corto?
Por ejemplo, read || read
simplemente no funciona (según los requisitos de la pregunta), porque cuando se lee el primer archivo true
, se omite la lectura del segundo archivo hasta que se haya leído el primer archivo de principio a fin ... Luego, porque el estado aún así true
, el ciclo while continúa y lee el segundo archivo de principio a fin.
read && read
leerá los archivos simultáneamente (sincrónicamente) si solo desea leer hasta el archivo más corto. Sin embargo, si desea leer ambos archivos eof
, debe trabajar con los while's
requisitos de sintaxis, es decir. por el comando inmediatamente antes del do while
ciclo que produce un código de retorno distinto de cero para salir del ciclo while.
Aquí hay un ejemplo de cómo leer ambos archivos en eof
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(es posible que desee probar eof3 y eof4 antes de la lectura, pero la idea general está ahí, especialmente en la condición final verdadero / falso.
||
no funciona para mi Procesa fichero1 continuación fichero2 , pero sí mantener los archivos sincronizados con la&&
que sale del tiempo de bucle a primera EF . - GNU bash 4.1.5