Re: Curiosità grep

2007-09-23 Per discussione Davide Lo Re
Alle sabato 22 settembre 2007, Davide Prina ha scritto:
 Davide Lo Re wrote:
  Un buon test vale piu' di 1000 parole!
  Ecco allora un po' di semplici test che ho fatto su un file di mail da
  198MB:

 controlla anche la versione di grep che hai, perché hanno appena
 corretto alcuni bug introdotti in una versione recente che rallentavano
 grep con alcuni locale
ho la 2.5.3, e risulta aggiornato in unstable.
 Ciao
 Davide
Ciao omonimo ;)



Re: Curiosità grep

2007-09-22 Per discussione Davide Prina

Davide Lo Re wrote:


Un buon test vale piu' di 1000 parole!
Ecco allora un po' di semplici test che ho fatto su un file di mail da 198MB: 


controlla anche la versione di grep che hai, perché hanno appena 
corretto alcuni bug introdotti in una versione recente che rallentavano 
grep con alcuni locale


per saperne di più:
$ querybts grep

Ciao
Davide

--
Dizionari: http://linguistico.sourceforge.net/wiki
Petizione per l'uso di formati accessibili nell'Unione Europea
http://tinyurl.com/y6u4m5
Non autorizzo la memorizzazione del mio indirizzo su outlook



Re: Curiosità grep

2007-09-21 Per discussione Davide Lo Re
Alle giovedì 20 settembre 2007, Andrea Barbaglia ha scritto:
 Ciao a tutti,
Ciao!

 mentre giocavo qua è la con la shell, un dubbio atroce
 mi si è infilato in testa riguardo la velocità di
 grep...
E' una Buona Domana :-p
 Mettiamo che abbia un file di testo di dimensioni
 considerevoli, vicine o superiori al giga.
 Voglio cercare all'interno di tale file una parola...
[snip]
Un buon test vale piu' di 1000 parole!
Ecco allora un po' di semplici test che ho fatto su un file di mail da 198MB: 
(grandezza molto inferiore al giga, ma comunque considerevole)

A) $ time for i in $(seq 1 10); do grep ciao Inbox; done
real2m14.596s

ovvero 134 secondi, di media 13,4 dato che abbiamo eseguito 10 volte la stessa 
operazione.

poi mi e' venuto in dubbio: tutto quell'output non rallentera' il processo? 
proviamo a buttarlo via... (e poi che greppiamo a fare? faremo anche una 
prova per mandare il tutto in un nuovo file!)

B) $ time for i in $(seq 1 10); do grep ciao Inbox  /dev/null; done
real2m1.764s

120 secondi, dunque un miglioramento di 1,4 secondi. Non male.
Ma dobbiamo anche considerare che la parola cercata ciao e' molto frequente: 
capita in 7409 righe, che stampano un output di 530346 caratteri.
La differenza sarebbe minore se greppassimo una parola rara o inesistente? 
proviamo! (ma visto che mi sono stufato di aspettare sempre cosi' tanto, 
riduciamo a 5 le prove, che va piu' che bene ;)

C) $ time for i in $(seq 1 5); do grep pastrufazio Inbox ; done
real0m59.588s

D) $ time for i in $(seq 1 5); do grep pastrufazio Inbox  /dev/null; done
real0m52.489s

A sorpresa, la differenza rimane, anche se minore: 12 secondi senza 
redirezione (ma di fatto non stampa nulla a video), 10,4 secondi con 
redirezione.

Possiamo comunque notare che i tempi sono COMUNQUE piu' bassi ricercando 
parole piu' rare.

E ora, la domanda iniziale: meglio grep stringa file o cat file|grep 
stringa ??

E) $ time for i in $(seq 1 5); do cat Inbox|grep ciao; done
real0m57.316s

11,4 secondi di media. 2 secondi sotto il test A!

Si e' parlato anche di usare grep -F... proviamo

F) $ time for i in $(seq 1 5); do grep -F ciao Inbox; done
real0m53.277s

10,64 secondi di media, decisamente sotto al test A.
Proviamo ora ad abbinare i test E ed F per vedere se possiamo migliorare 
ancora.

G) $ time for i in $(seq 1 5); do cat Inbox|grep -F ciao; done
real0m49.621s

9,92 secondi. Proviamo ora a redirigere su /dev/null.

H) $ time for i in $(seq 1 5); do cat Inbox|grep -F ciao  /dev/null; done
real0m46.972s

9,39 secondi di media. E' il miglior risultato che sono riuscito a 
raggiungere, e considerando che sono partito da 13,4, la differenza non e' 
poca (4 secondi su 13.4, quasi il 30%). Peccato che se redirigiamo 
a /dev/null concludiamo ben poco. Proviamo a redirigere in un file per sapere 
se conviene.

H) $ time for i in $(seq 1 5); do cat Inbox|grep -F ciao  prova; done
real0m49.864s

9,96 secondi, molto simile al test G. Si puo' dire che mandare su file e' piu' 
lento, ma non di molto (quantomeno se il file creato e', come in questo caso, 
di 513K).

Il mio HD non e' molto veloce, penso che ipotizzando un HD veloce e un file da 
1 GB il tempo possa essere inferiore ai 50 secondi (che sarebbero il 
quintuplo del tempo da me impiegato per un file da 200 mega).
 Tipicamente userei grep parola nomedelfile o in alternativa
 cat nomedelfile | grep parola.
 Primo dubbio, secondo voi quale dei due è piu' veloce?
Il secondo :-) (e dire che avrei scommesso sul primo...)
 Secondo dubbio, esistono altri modi per parsare un
 file di tali dimensioni senza aspettare tempi biblici e
 nel mentre andare a prendersi un caffè molto molto lungo???
Tutto sommato i tempi non si sono dimostrati proprio biblici.
Comunque dipende anche a cosa ti serve: se il risultato deve essere passato in 
pasto ad un programma o roba cosi' e' un conto, se invece devi leggerlo a 
mano cambia molto: ad esempio  puoi mettere grep a lavorare buttando l'output 
su un nuovo file da leggere nel frattempo con tail -f e less (o, se usi un 
terminale virtuale, basta impostare abbastanza memoria per le informazioni 
stampate e leggere con calma quello che appare man mano)

 Grazie e un saluto, Andrea.
Grazie a te per le prove che mi hai incentivato a fare!

Ciao
Davide



Curiosità grep

2007-09-20 Per discussione Andrea Barbaglia


Ciao a tutti,

mentre giocavo qua è la con la shell, un dubbio atroce
mi si è infilato in testa riguardo la velocità di
grep...
Mettiamo che abbia un file di testo di dimensioni
considerevoli, vicine o superiori al giga.
Voglio cercare all'interno di tale file una parola...
Tipicamente userei grep parola nomedelfile o in alternativa
cat nomedelfile | grep parola.
Primo dubbio, secondo voi quale dei due è piu' veloce?
Secondo dubbio, esistono altri modi per parsare un
file di tali dimensioni senza aspettare tempi biblici e
nel mentre andare a prendersi un caffè molto molto lungo???

Mah, chissà perchè mi faccio ste deomande strane ;)

Grazie e un saluto, Andrea.




Re: Curiosità grep

2007-09-20 Per discussione Lucio Crusca
Andrea Barbaglia wrote:

 Voglio cercare all'interno di tale file una parola...
 Tipicamente userei grep parola nomedelfile o in alternativa
 cat nomedelfile | grep parola.
 Primo dubbio, secondo voi quale dei due è piu' veloce?
Intuitivamente direi circa uguali. Hai provato a fare un test?

 Secondo dubbio, esistono altri modi per parsare un
 file di tali dimensioni senza aspettare tempi biblici e
 nel mentre andare a prendersi un caffè molto molto lungo???
Sì, comprare un computer più veloce. :)

Lucio.

-- 
Virtual Bit di Lucio Crusca
via Isonzo, 5 - 10069 Villar Perosa (TO) - Italy
http://www.sulweb.org


-- 
Per REVOCARE l'iscrizione alla lista, inviare un email a 
[EMAIL PROTECTED] con oggetto unsubscribe. Per
problemi inviare un email in INGLESE a [EMAIL PROTECTED]

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Curiosità grep

2007-09-20 Per discussione Davide Cervella

Andrea Barbaglia ha scritto:

Secondo dubbio, esistono altri modi per parsare un
file di tali dimensioni senza aspettare tempi biblici e
nel mentre andare a prendersi un caffè molto molto lungo???


Se quel che devi cercare NON è una regexp c'è l'opzione -F con cui 
*credo* che possa andare un pochino più svelto (altrimenti mi sfugge il 
motivo dell'opzione stessa!).
Non ho mai fatto prove specifiche però... se tu hai il caso reale 
sottomano potresti pubblicare i risultati.


--
Davide


--
Per REVOCARE l'iscrizione alla lista, inviare un email a 
[EMAIL PROTECTED] con oggetto unsubscribe. Per

problemi inviare un email in INGLESE a [EMAIL PROTECTED]

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]