80 votes

La plus rapide possible grep

Je voudrais savoir si il existe une astuce pour faire des grep aussi vite que possible. J'ai une assez grande base de fichiers texte à rechercher dans le plus rapidement possible. J'ai fait tous en minuscules, pour que je puisse me débarrasser de -i option. Cela rend la recherche beaucoup plus rapide.

Aussi, j'ai découvert que l' -F et -P modes sont plus rapides que celui par défaut. J'utilise l'ancienne lors de la recherche de la chaîne n'est pas une expression régulière (que du texte), ce dernier, si la regex est impliqué.

Quelqu'un a une expérience dans l'accélération de la grep? Peut-être le compiler à partir de zéro avec certains pavillon particulier (je suis sur Linux CentOS), organiser les fichiers dans un certain mode ou peut-être faire de la recherche en parallèle d'une certaine façon? Tout conseil est le bienvenue. Merci.

104voto

Chewie Points 2948

Essayez avec GNU parallèle, qui comprend un exemple de comment l'utiliser avec grep:

grep -r grep à travers les répertoires de manière récursive. Sur les Processeurs multicœurs GNU parallel pouvez souvent de la vitesse.

find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}

Cela permettra d'exécuter 1.5 job par cœur, et de donner 1000 arguments au grep.

Pour les gros fichiers, il peut diviser l'entrée en plusieurs morceaux avec l' --pipe et --block arguments:

 parallel --pipe --block 2M grep foo < bigfile

Vous pouvez également l'exécuter sur plusieurs machines via SSH (ssh-agent nécessaire pour éviter les mots de passe):

parallel --pipe --sshlogin server.example.com,server2.example.net grep foo < bigfile

70voto

daveb Points 24831

Si vous êtes à la recherche de très gros fichiers, alors la configuration de vos paramètres régionaux peuvent vraiment aider.

GNU grep va beaucoup plus vite dans la locale C que avec l'encodage UTF-8.

export LC_ALL=C

5voto

Sandro Pasquali Points 156

Apparemment, à l'aide de --mmap peut aider sur certains systèmes:

http://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

4voto

the wanderer Points 31

Pas strictement un code amélioration, mais quelque chose que j'ai trouvé utile après l'exécution de la commande grep sur+ de 2 millions de fichiers.

J'ai déménagé sur un bon disque SSD (120GO). À environ 100$, c'est une option abordable si vous êtes à croquer des lots de fichiers régulièrement.

0voto

xhtml Points 1

cgrep, si elle est disponible, peut être les ordres de grandeur plus rapide que grep.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X