performance grep -f

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

performance grep -f

Messaggio da ZeroUno »

faccio
grep -f filtro filedagreppare

solo che il filtro è grande oltre 1000 righe e filedagreppare oltre 4000

capite che le performance non sono il massimo (siamo nell'ordine di 3 minuti)


Esiste un modo più performante di eseguire la stessa ricerca (magari con awk o perl, ma che non sia troppo complesso)?

Capisco che è una ricerca di complessità computazionale quadratica, ma forse si può ottimizzare considerando che la struttura del file sorgente e quello destinazione sono conosciuti:

sorgente:
1000 righe simini a

Codice: Seleziona tutto

 aaa_base [^ ]\+ [^ ]\+ [0-9]\+ 
 xorg-server-xephyr [^ ]\+ [^ ]\+ [0-9]\+_slack14.1 
(spazi iniziali e finali inclusi); vi ricorda qualcosa? ;)
mentre il file da greppare è /var/lib/slackpkg/pkglist, quindi

Codice: Seleziona tutto

...
patches xorg-server-xephyr 1.14.3 i486 3_slack14.1 xorg-server-xephyr-1.14.3-i486-3_slack14.1 ./patches/packages txz
slackware aaa_base 14.1 i486 1 aaa_base-14.1-i486-1 ./slackware/a txz
...
l'output deve essere nello stesso ordine in cui è pkglist e quindi non in ordine alfabetico per pacchetto

Codice: Seleziona tutto

slackware aaa_base 14.1 i486 1 aaa_base-14.1-i486-1 ./slackware/a txz
patches xorg-server-xephyr 1.14.3 i486 3_slack14.1 xorg-server-xephyr-1.14.3-i486-3_slack14.1 ./patches/packages txz

Avete qualche soluzione per fare l'operazione più velocemente possibile?

Grazie
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: performance grep -f

Messaggio da ZeroUno »

devo ancora approfondire, ma stranamente fare 1000 grep ed altre operazioni anzichè una grep -f sembra più veloce. bah.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: performance grep -f

Messaggio da targzeta »

Perché non ci posti i due file?

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: performance grep -f

Messaggio da ZeroUno »

meglio, vi posto lo script:

la mia /var/log/packages è di 1418 pacchetti
il /var/lib/slackpkg/pkglist di 3587 pacchetti

Codice: Seleziona tutto

cd /var/log/packages ; time ls  |sed 's/$/.txz/' |awk -f /usr/libexec/slackpkg/pkglist.awk|awk '{print $1,$4}'|sed -r -e 's/ [0-9]+([^0-9].*)*$/ [^ ]\\+ [^ ]\\+ [0-9]\\+\1 /' -e 's/^/ /'|grep -f - /var/lib/slackpkg/pkglist >/tmp/pippo
su un i7 con disco ssd ha impiegato 5 minuti esatti


edit: comunque lo sto complicando perchè devo ottenere altri risultati ma paradossalmente sto migliorando le performance. Il concetto è che mi sto evitando un po' di espressioni regolari e limitando le feature volute (il tipo di output. Ma è ancora work-in-progress
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: performance grep -f

Messaggio da targzeta »

Mi posti almeno il file pkglist? Io non ho slackpkg.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: performance grep -f

Messaggio da ZeroUno »

Eccolo, ma la grep è tutta da rifare perchè non tiene conto di alcune cose che devo rivedere, quindi l'output di quella grep non va bene.
Allegati
pkglist.gz
(55.36 KiB) Scaricato 149 volte
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Rispondi