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