Meine Zeichenfolgen sind Dateipfade wie s/14/11/13/15/n7ce49B_235_25ed2d70.jpg
; meine muster sind ganz einfach, alle mögen n7ce49B_.+
.
Ich arbeite GNU grep 2.6.3
unter Debian 6.0.10 auf einem Dell DL360G7- Server (ich erwähne es nur, um einen Eindruck von dieser Maschinenleistung zu bekommen) mit 15-k-Festplatten und dem folgenden Befehl: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
Kann einfach nicht ausgeführt werden - Server-Auslagerungen sind zu schlecht. Bei 20.000 Mustern dauert es mehr als 3 Stunden.
Das erscheint mir unvernünftig.
Per Kommentaranfrage gibt es die Dateien: Dateipfade 20k Muster
Man kann auch die Anzahl der Eingabezeilen und -muster testen und anpassen mit:
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
90k
, hat die Beschreibung20K
Mustergrep
.xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
. Es sieht so aus, als würde die Zeit für das Kompilieren der regulären Ausdrücke und das Zuweisen von viel Speicher aufgewendet. Mit-F
anstelle von-E
ist es augenblicklich.n7ce49B_.+
gleichbedeutend mitn7ce49B_.
Antworten:
In älteren Versionen von GNU grep ( Fehler # 22357 ), die durch dieses Commit behoben wurden und in Version 2.28 veröffentlicht wurden, obwohl diese Änderung einige Regressionen mit sich brachte , trat ein Leistungsproblem auf. Daher sollten Sie
grep
stattdessen GNU 3.0 oder neuer installieren.quelle