Written by georg on Oktober 3, 2014
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
Wir ersetzen alle y durch x mit awk:
# 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!
Schreibe einen Kommentar