Moje ciągi to ścieżki plików s/14/11/13/15/n7ce49B_235_25ed2d70.jpg
; moje wzory są dość proste n7ce49B_.+
.
Biegnę GNU grep 2.6.3
pod Debianem 6.0.10 na Dell DL360G7 serwera (Wspominam go po prostu dać poczucie tego urządzenia perfomance) z 15k dysków, a to poleceniem: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
Po prostu nie mogę kompletny - swapy serwera źle. Z 20k wzorami zajmuje to ponad 3 godziny.
Wydaje mi się to nierozsądne.
Na żądanie komentarza są pliki: ścieżki plików 20k wzorców
Można również przetestować i dostosować liczbę linii wejściowych i wzorów za pomocą:
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
90k
, opis ma20K
wzorygrep
.xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
. Wygląda na to, że spędza się czas na kompilowaniu wyrażeń regularnych i przydzielaniu dużej ilości pamięci. Z-F
zamiast-E
jest to natychmiastowe.n7ce49B_.+
jest to równoważne zn7ce49B_.
Odpowiedzi:
Wystąpił problem z wydajnością w starszych wersjach GNU grep ( błąd nr 22357 ), który został rozwiązany przez to zatwierdzenie , wydane w wersji 2.28, chociaż ta zmiana wprowadziła pewne regresje , więc
grep
zamiast tego chciałbyś uzyskać GNU 3.0 lub nowszy.źródło