Mis cadenas son rutas de archivo como s/14/11/13/15/n7ce49B_235_25ed2d70.jpg
; mis patrones son bastante simples, como todos n7ce49B_.+
.
Estoy corriendo GNU grep 2.6.3
bajo Debian 6.0.10 de Dell DL360G7 servidor (lo menciono sólo para dar una idea de esta máquina del perfomance) con 15k unidades de disco duro, y este comando: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
simplemente no se puede completar - permutas de servidores demasiado mal. Con 20k patrones, lleva más de 3 horas.
Eso me parece irracional.
Por solicitud de comentario, están los archivos: rutas de archivo 20k patrones
También se puede probar y ajustar el número de líneas y patrones de entrada con:
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
90k
, la descripción tiene20K
patronesgrep
.xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
. Parece que se pasa el tiempo compilando las expresiones regulares y asignando mucha memoria. Con en-F
lugar de-E
, es instantáneo.n7ce49B_.+
es equivalente an7ce49B_.
Respuestas:
Te encontraste con un problema de rendimiento en versiones anteriores de GNU grep ( error # 22357 ) que fue abordado por este commit , lanzado en 2.28, aunque ese cambio introdujo algunas regresiones , por lo que querrás obtener GNU
grep
3.0 o más nuevo.fuente