Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: vyhledavaci algoritmus v grepu  (Přečteno 8082 krát)

nettezzaumana

  • Host
vyhledavaci algoritmus v grepu
« kdy: 08 Ledna 2008, 10:20:32 »
Fujtajbl vespolek::

udelal jsem nesmirne zajimave (alespon pro me) zjisteni::

sed ma na mem pocitaci cca 15x rychlejsi vyhledavaci algoritmus nez grep ..

muzete vyzkouset (u me)::
-------------------------------------------------------------------------------
$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
real    0m1.492s
user    0m1.444s
sys     0m0.056s // vyhledavani pomoci sedu -- zjistujeme pocet polozek zobrazitelnych prikazem man, vyhledavame '\.gz$'

$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
real    0m22.253s
user    0m22.005s
sys     0m0.196s // vyhledavani pomoci grepu

$ perl -e '$HEH = 22.253 / 1.429; print $HEH."\n";' // spocitame si kolikrat jsme rychlejsi se sedem
15.5724282715185 // uff. nechci se opakovat, ale 15x me dostava
-------------------------------------------------------------------------------

Vyse uvedene prikazy by mely byt naprosto totozne -- v obou vyhledavame vyrazz '\.gz$' mezi manpagema ..
Vystup z prikazu by melo byt cislo, reprezentujici pocet polozek zobrazitelnych prikazem 'man'

Ja mam nainstalovano spousta -dev balicku, takze u me je to cislo relativne velike (11631).

Zajimalo by me, jestli mi i Vy ostatni potvrdite, ze onen vyhledavaci algoritmus v sedu je tolikrat (!15x)
rychlejsi nez v grepu ..

Muj system::
openSuSE 10.3 32bit, kernel 2.6.22.13-0.3-default
GNU grep version 2.5.2
GNU sed version 4.1.5

zdravi ntz

ps.:: zkusil jsem to same s vyrazy::
-------------------------------------------------------------------------------
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
real    0m1.532s
user    0m1.500s
sys     0m0.180s // vyhledavame sedem vsechny '\.c$' ve zdrojacich jadra

$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait
real    0m21.108s
user    0m21.033s
sys     0m0.136s // vyhledavame grepem vsechny '\.c$' ve zdrojacich jadra

$ perl -e '$FUJ = 21.108 / 1.532; print $FUJ."\n";'
13.7780678851175 // uff. 13x je taky slusny..

$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
real    0m2.072s
user    0m1.064s
sys     0m0.992s // ted pro zmenu ziskavame komentare z /etc/init.d

$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
real    0m14.970s
user    0m13.777s
sys     0m1.096s

$ perl -e '$FUJ = 14.970 / 2.072; print $FUJ."\n";'
7.22490347490348 // 7x rychlejsi pri praci se skutecnymi soubory
-------------------------------------------------------------------------------

.. a jak vidite sami, o5 podobny vysledek .. po tomto zjisteni tedy budu na filtrovani pouzivat zasadne sed, protoze me nove heslo jest::
GNU grep sucks.. // 10-15x rychlejsi sed me skutecne prekvapil

pps.:: a co na to treba rychlost startu systemu(init skripty) a potazmo jan tleskac?

ad.2)
$ echo $(count=0; for x in $(for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/\<e\?grep\>/!d' $x; fi; done); do count=$(($count + 1)); done && echo $count)
sed: can't read /etc/init.d/spamd: Permission denied
1912 // as you can see, this scary command returns, that grep is used in /etc/init.d in 1912 cases -- & i presume, that in most of them
(likely very close to all of them) as a filter (& anyway, for what else should be used?)..


« Poslední změna: 08 Ledna 2008, 10:27:13 od nettezzaumana »

ufaak

  • Závislák
  • ***
  • Příspěvků: 2296
Re: vyhledavaci algoritmus v grepu
« Odpověď #1 kdy: 08 Ledna 2008, 11:18:34 »
hmm ja mam teda opacnou zkusenost...

Kód: [Vybrat]
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7432
6236
[1]+  Done                    echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count)

real    0m1.040s
user    0m0.332s
sys     0m0.052s
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7437
6236
[1]+  Done                    echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count)

real    0m0.935s
user    0m0.312s
sys     0m0.024s
ufaak@notysek:~$ perl -e '$HEH = 0.935 / 1.040; print $HEH."\n";'
0.899038461538462
notebook MSI EX720X, Ubuntu 10.10

nettezzaumana

  • Host
Re: vyhledavaci algoritmus v grepu
« Odpověď #2 kdy: 08 Ledna 2008, 11:24:18 »
4 ufaak >> hmm. no to je teda dost zajimavy..

dik za odpoved

nettezzaumana

  • Host
Re: vyhledavaci algoritmus v grepu
« Odpověď #3 kdy: 08 Ledna 2008, 11:30:03 »
prosim, nemohl by jsi (nemohli by jste) to provest jako ufaak, ale udelat mi (mate -li napr. zdrojaky jadra -- a nebo ty komentare z z /etc/init.d) a postnout sem vypis::
(klidne bez vypoctu v perlu) ..

delam pro Linuxovou firmu a tohle bych rad doresil .. ps. pokud na zaver pridate vypis z ::
$ uname -r
$ grep -V
$ sed --version
budete uplne genialni -- tohle totiz vypada jako bug basesystemu .. uz jsem to postnul svym byvalym kolegum do suse.cz aka::
Citace
Hallo guys..
I made very exciting ascertainment :: // at least for me ;)

text filtering algorithm in sed is much more (!!7-15 times) faster than in grep..
just try as me::
-------------------------------------------------------------------------------
$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
real    0m1.492s
user    0m1.444s
sys     0m0.056s // let's calculate count of by man command accessible items

$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
real    0m22.253s
user    0m22.005s
sys     0m0.196s

$ perl -e '$HEH = 22.253 / 1.429; print $HEH."\n";'
15.5724282715185 // uff.. i can't believe..

$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
real    0m1.532s
user    0m1.500s
sys     0m0.180s // looking for '\.c$' ending files in linux source

$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait
real    0m21.108s
user    0m21.033s
sys     0m0.136s

$ perl -e '$FUJ = 21.108 / 1.532; print $FUJ."\n";'
13.7780678851175 // "uff.." secondly

$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
real    0m2.072s
user    0m1.064s
sys     0m0.992s // let's obtain comments from /etc/init.d

$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
real    0m14.970s
user    0m13.777s
sys     0m1.096s

$ perl -e '$FUJ = 14.970 / 2.072; print $FUJ."\n";'
7.22490347490348 // seven times faster while working with real files? --still not so bad
-----------------------------------------------------------------------------------

in all examples we are looking for RE via $(sed '/RE/!d') and $(grep -E 'RE')..
& results fundamentally differ

My system::
openSuSE 10.3 32bit, kernel 2.6.22.13-0.3-default
GNU grep version 2.5.2
GNU sed version 4.1.5 // hopefully fully updated

<b>what about globally substitute filtering algorithm in init scripts?
it should generally burst up system boot time.

so. let's become in real::
grep should suck no more!</b>

have a nice day and pray u 'good hunting' with your business.

exclusively for suse developers by nettezzaumana

ps.:: for guys in prague office >>
Pokud Vam to chlapci prijde minimalne tak zajimave jako me, postnete to na maso@suse.cz

Best Regards

ad.1)
$ echo $(count=0; for x in $(for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/\<e\?grep\>/!d' $x; fi; done); do count=$(($count + 1)); done && echo $count)
sed: can't read /etc/init.d/spamd: Permission denied
1912 // as you can see, this scary command returns, that grep is used in /etc/init.d in 1912 cases -- & i presume, that in most of them
(likely very close to all of them) as a filter (& anyway, for what else should be used?)..
« Poslední změna: 08 Ledna 2008, 11:38:51 od nettezzaumana »

nettezzaumana

  • Host
Re: vyhledavaci algoritmus v grepu
« Odpověď #4 kdy: 08 Ledna 2008, 13:14:34 »
pokud bude nekdo tak laskav, tak bych uvital, kdyby jste mi postli Vas vypis z prikazu:

$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait

// a mate li zdrojaky jadra:: samozrejme musite zmenit verzi na vasi
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait

$ uname -r
$ grep -V
$ sed --version

dikec a zdravi ntz

ufaak

  • Závislák
  • ***
  • Příspěvků: 2296
Re: vyhledavaci algoritmus v grepu
« Odpověď #5 kdy: 08 Ledna 2008, 14:22:00 »
Tak posílám podruhé, tentokrát z práce pres Putty...

Kód: [Vybrat]
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7652
6236
[1]+  Done                    echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count)

real    0m0.358s
user    0m0.344s
sys     0m0.020s
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7657
6236
[1]+  Done                    echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count)

real    0m0.426s
user    0m0.400s
sys     0m0.044s
ufaak@notysek:~$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
[1] 7662
[1]+  Done                    `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null`

real    0m0.224s
user    0m0.152s
sys     0m0.072s
ufaak@notysek:~$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
[1] 7757
[1]+  Done                    `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null`

real    0m0.210s
user    0m0.140s
sys     0m0.072s
ufaak@notysek:~$ uname -r
2.6.22-14-generic
ufaak@notysek:~$ grep -V
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
Toto je volnĂŠ programovĂŠ vybavenĂ­; podmĂ­nky pro kopĂ­rovĂĄnĂ­ a rozĹĄiĹovĂĄnĂ­
naleznete ve zdrojovĂ˝ch textech. Toto programovĂŠ vybavenĂ­ je zcela BEZ ZĂRUKY,
a to i bez zĂĄruky PRODEJNOSTI nebo VHODNOSTI PRO NÄJAKĂ

ufaak@notysek:~$ sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
  Toto je volnĂŠ programovĂŠ vybavenĂ­; podmĂ­nky pro kopĂ­rovĂĄnĂ­ a rozĹĄiĹovĂĄnĂ­
naleznete ve zdrojovĂ˝ch textech. Toto programovĂŠ vybavenĂ­ je zcela BEZ ZĂRUKY,
a to i bez zĂĄruky PRODEJNOSTI nebo VHODNOSTI PRO NÄJAKĂ
ufaak@notysek:~$

jen dodam, ze pouzivam Ubuntu 7.10 :)
« Poslední změna: 08 Ledna 2008, 14:23:58 od ufaak »
notebook MSI EX720X, Ubuntu 10.10

nettezzaumana

  • Host
Re: vyhledavaci algoritmus v grepu
« Odpověď #6 kdy: 08 Ledna 2008, 14:28:09 »
Ufaaku >> jeden applaud je pro Tebe malo ..
dikec synku ;)

zdravi ntz

ps. jeste ti nejak hapruje cestina v konzoli :: reseni je spousta::
pokud Ti nevadi anglictina, zkus do ~/.bashrc pridat radek 'export LANG=en_US.utf8'
a nebo si pohraj s konzolovym fontem ..

pps. co to mas za stroj? mas to nejake ultrarychle ;)
« Poslední změna: 08 Ledna 2008, 14:32:00 od nettezzaumana »

ufaak

  • Závislák
  • ***
  • Příspěvků: 2296
Re: vyhledavaci algoritmus v grepu
« Odpověď #7 kdy: 08 Ledna 2008, 14:39:53 »
cestina mi hapruje akorat kdyz se pripojim z prace z windows... a to mi nijak extra nevadi :)
vic by mi asi vadila ta anglictina :D

mam to v popisku, ale je to http://www.czechcomputer.cz/product.jsp?artno=36385
notebook MSI EX720X, Ubuntu 10.10

ufaak

  • Závislák
  • ***
  • Příspěvků: 2296
Re: vyhledavaci algoritmus v grepu
« Odpověď #8 kdy: 08 Ledna 2008, 14:40:45 »
ted ho budu davat na druhou reklamaci, predpokladam, ze mi zase nepujde vysunout mechanika :D
no a pak se to stejne stane potreti a pujdu zas do nejakyho novyho :)
notebook MSI EX720X, Ubuntu 10.10

nettezzaumana

  • Host
Re: vyhledavaci algoritmus v grepu
« Odpověď #9 kdy: 08 Ledna 2008, 15:33:45 »
to je strasne zvlastni >> mate hrozne nizke ty casy .. checknete nekdo pls, jestli me prikazy (mam suse) funguji stejne i na ubuntu ..

 

Provoz zaštiťuje spolek OpenAlt.