Bash während Leseschleife extrem langsam im Vergleich zu Katze, warum?

Ein einfaches Testskript hier:

while read LINE; do
        LINECOUNT=$(($LINECOUNT+1))
        if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done

Wenn ich es tuecat my450klinefile.txt | myscript Die CPU blockiert zu 100% und kann ungefähr 1000 Zeilen pro Sekunde verarbeiten. Ca. 5 Minuten, um was zu verarbeitencat my450klinefile.txt >/dev/null macht in einer halben Sekunde.

Ist da eineffizienter Weg im wesentlichen dies zu tun. Ich muss nur eine Zeile von stdin lesen, die Bytes zählen und in eine Named Pipe schreiben. Aber die Geschwindigkeit dieses Beispiels ist unglaublich gering.

Alle 1 GB Eingabezeile muss ich ein paar komplexere Skriptaktionen ausführen (einige Pipes schließen und öffnen, in die die Daten eingespeist werden).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage