Bash mientras lee el bucle extremadamente lento en comparación con el gato, ¿por qué?
Un script de prueba simple aquí:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
Cuando lo hagocat my450klinefile.txt | myscript
la CPU se bloquea al 100% y puede procesar aproximadamente 1000 líneas por segundo. Unos 5 minutos para procesar lo quecat my450klinefile.txt >/dev/null
Lo hace en medio segundo.
Hay unforma más eficiente para hacer esencialmente esto. Solo necesito leer una línea desde la entrada estándar, contar los bytes y escribirla en una tubería con nombre. Pero la velocidad de incluso este ejemplo es increíblemente lenta.
Cada 1 Gb de líneas de entrada necesito realizar algunas acciones de script más complejas (cierre y abra algunas tuberías a las que se están alimentando los datos).