grep ist langam!

23/06/2008 - 13:59 von Dirk Clemens | Report spam
Ein kleiner Blog zur Info:

Ich habe hier eine Datei von 27 MiB in 285411 Zeilen.
Nun muss ich wissen, wieviele Zeilen mit einem Minuszeichen
beginnen. Meine erste Lösung:
# grep ^- datei | wc -l

Das dauert viele Minuten.
Daher habe ich eine kleine test-Serie gestartet:

Ersteinmal die Datei verkleinert:
# head -n 1000 datei > datei1000

Und dann ein paar Zeitmessungen (reproduzierbare Werte):

# grep --version
GNU grep 2.5.2
...

# awk --version
GNU Awk 3.1.5g
...

# time grep ^- datei1000 | wc -l
919

real 0m3.192s
user 0m3.156s
sys 0m0.008s

# time awk '$0 ~ /^-/ {print}' datei1000 | wc -l
919

real 0m0.045s
user 0m0.028s
sys 0m0.016s

# time awk '$0 ~ /^-/ {n=n+1} END { print n}' datei1000
919

real 0m0.031s
user 0m0.028s
sys 0m0.004s

Wie man sieht, sieht awk wesentlich schneller als grep!

Habe den test auch mit 10000 Zeilen wiederholt
(beide 'wc -l'-Varianten).
grep: user 0m33.598s
awk: user 0m0.252s

Das ist erstaunlicher Weise ein Faktor von 133!
Ist grep wirklich so grottenschlecht?


Dirk

Mail bitte an: lemmi (minus) usenet (at) ftb (minus) net (dot) de
 

Lesen sie die antworten

#1 Dirk Clemens
23/06/2008 - 14:06 | Warnen spam
Dirk Clemens schrieb:

Habe den test auch mit 10000 Zeilen wiederholt
(beide 'wc -l'-Varianten).
grep: user 0m33.598s
awk: user 0m0.252s




Selber Test auf schnellerem Rechner mit àhnlichen Daten:

Datei: 1.9 MB in 16620 Zeilen

# grep --version
GNU grep 2.5.2
# awk --version
GNU Awk 3.1.5g

Ergebnis:
grep: user 10.785s
awk: user 0.264s
-> Faktor 40


Mail bitte an: lemmi (minus) usenet (at) ftb (minus) net (dot) de

Ähnliche fragen