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).

Respuestas a la pregunta(4)

Su respuesta a la pregunta