proc? protoze pouzivam jak awk, tak lua
Nezbylo nez to vyzkouset
samozrejme na jinem compu a jinem file, ale da se z toho udelat predstava:
jet@rmint /tmp $ time awk '{print substr($0,length($0)-4,5)}' big2 >/dev/null
real 1m7.536s
user 1m0.277s
sys 0m5.243s
jet@rmint /tmp $ time cat big2 | lua -e 'for line in io.lines() do print(line:sub(-5)) end' >/dev/null
real 3m4.567s
user 2m17.618s
sys 0m56.296s
takze z toho vyplyva, ze lua je radove 3 krat pomalejsi nez vitez awk, takze by s prehledem obsadila druhe misto. Echo, ktere bylo na druhem miste bylo 10 krat pomalejsi.
Zkousel jsem to s 3G filem na 1.8G Intel core 2 duo.
je to neuveritelne, ale je to presne naopak. roura o par milisekund vede
$ time cat /tmp/biglog | lua -e 'for line in io.lines() do print(line:sub(-5)) end' >/dev/null
real 0m2.423s
user 0m1.860s
sys 0m1.150s
$ time lua -e 'file=io.open("/tmp/biglog") for line in file:lines() do print(line:sub(-5)) end' >/dev/null
real 0m2.576s
user 0m1.921s
sys 0m0.647s
Muzu potvrdit, ze perl opravdu vede.
Testovaci soubor o velikosti 1.6GB jsem vyrobil zretezenim kernel logu.
Tady jsou vysledky pro lua, awk a perl:
time cat /tmp/biglog | lua -e 'for line in io.lines() do print(line:sub(-5)) end' >/dev/null
real 0m9.187s
user 0m4.696s
sys 0m1.960s
time awk '{print substr($0,length($0)-4,5)}' /tmp/biglog >/dev/null
real 0m5.259s
user 0m4.976s
sys 0m0.256s
time cat /tmp/biglog | perl -ne 'print substr($_,-6);' > /dev/null 2>&1
real 0m2.526s
user 0m2.252s
sys 0m0.868s