Mes chaînes sont des chemins de fichiers comme s/14/11/13/15/n7ce49B_235_25ed2d70.jpg
; mes modèles sont assez simples, tout comme n7ce49B_.+
.
Je fonctionne GNU grep 2.6.3
sous Debian 6.0.10 sur le serveur Dell DL360G7 (je le mentionne juste pour donner une idée de la performance de cette machine) avec des disques durs 15k, et cette commande: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
ne peut tout simplement pas terminer - le serveur échange trop mal. Avec 20 000 motifs, cela prend plus de 3 heures.
Cela me semble déraisonnable.
Par demande de commentaire, il y a les fichiers: chemins de fichiers 20k motifs
On peut également tester et ajuster le nombre de lignes et de motifs d'entrée avec:
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
90k
, la description a des20K
motifsgrep
.xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
. Il semble que le temps soit passé à compiler les expressions rationnelles et à allouer beaucoup de mémoire. Avec-F
au lieu de-E
, c'est instantané.n7ce49B_.+
n'est pas équivalent àn7ce49B_.
Réponses:
Vous avez rencontré un problème de performances dans les anciennes versions de GNU grep ( bogue n ° 22357 ) qui a été résolu par cette validation , publiée dans la version 2.28, bien que cette modification ait introduit certaines régressions , vous voudriez donc obtenir GNU
grep
3.0 ou une version plus récente à la place.la source