tuning
Speed Up Search & Replace in Shellscripts
Als erstes erzeugen wir ein paar Testdaten:
for i in {0..100000..1}; do echo "y $i $RANDOM "; done > testfile
Die Testdaten sehen jetzt etwa so aus (ca. 15MB):
head testfile y 0 8229 y 1 32515 y 2 13193 y 3 31231 y 4 27663 y 5 24114 y 6 20325 y 7 5351 y 8 1576 y 9 21936
# time awk '{ print "x "$2" "$3 }' < testfile > /dev/null real 0m5.942s user 0m5.672s sys 0m0.088s
und jetzt mit sed
# time sed s/"y"/"x"/g testfile > /dev/null real 0m4.870s user 0m4.644s sys 0m0.072s
Wir schränken die suche ein – nach dem ersten Treffer darf abgebrochen werden
# time sed s/"y"/"x"/ testfile > /dev/null real 0m3.560s user 0m3.380s sys 0m0.084s
Wir suchen gezielt nach Zeilenanfang
# time sed s/"^y"/"x"/ testfile > /dev/null real 0m3.604s user 0m3.416s sys 0m0.104s
Und ersetzen auch Zeilenanfang
# time sed s/"^y"/"^x"/ testfile > /dev/null real 0m3.575s user 0m3.428s sys 0m0.064s
Fazit: Wenn man das richtige Werkzeug zur richtigen Zeit benutzt lassen sich recht einfach 40% einsparen! AWK schneidet hier deutlich langsamer ab, weil erst die Parameter geparsed werden müssen!
Buchtipp: Web Performance Tuning
It seems there are infinite number of ways for a web site to break, making it difficult to systematically check all of them. The longer I work on web sites, the more surprised I am at the creativity of complex systems in finding ways to fail.
— Patrick Killelea, Web Performance Tuning, O'Reilly
Blauer Tacho
Heute hab ich es gewagt und die kaputte Beleuchtung vom Tacho durch blaue LEDs ersetzt. Schaut soweit schon ganz gut aus, mal sehen wie das ganze Abenteuer in absoluter Dunkelheit kommt!