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.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5227
Iscritto il: ven giu 02, 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

Messaggioda ZeroUno » lun giu 29, 2015 16:41

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: 5227
Iscritto il: ven giu 02, 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

Messaggioda ZeroUno » lun giu 29, 2015 20:44

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: 6538
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: performance grep -f

Messaggioda targzeta » lun giu 29, 2015 21:24

Perché non ci posti i due file?

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5227
Iscritto il: ven giu 02, 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

Messaggioda ZeroUno » mar giu 30, 2015 11:27

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: 6538
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: performance grep -f

Messaggioda targzeta » mar giu 30, 2015 19:37

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

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5227
Iscritto il: ven giu 02, 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

Messaggioda ZeroUno » mer lug 01, 2015 9:29

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 84 volte
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111