Speed Up Search & Replace in Shellscripts

Written by  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!

Category : Allgemein

Tags :

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.