[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Rechercher une ligne dans un gros fichier trié



Le Sun, Nov 14, 2004 à 04:43:21PM +0100, Lehmann Guillaume a écrit
> J.Pierre Pourrez wrote:
> >Bonjour,
> >
> >J'utilise grep pour rechercher une ligne dans un fichier trié de 14000
> >lignes.
> Une seule et unique ligne ?
> 
> >Je suppose que la recherche se fait ligne par ligne dans le fichier et
> >cela me semble un peu bourrin quand la recherche s'effectue plusieurs
> >centaines de fois.

Si chaque fois est suite à une action d'un opérateur humain les délais de grep
sont raisonnables. je viens de faire un test (portable PIII 500Mhz, 512 Mo) : 
$ time grep -e 'zzzzzzzz' *

real	0m0.071s
user	0m0.030s
sys	0m0.040s
$ pwd
/usr/share/doc/postgresql-doc/html
$ wc -l *|grep total
 329529 total
$ du -hs
6,4M	.

Si entre les modifications du fichier les mêmes motifs de grep sont utilisés
plusieurs fois il peut être intérressant de stocker les résultats positifs de
grep dans un fichier accélérateur.

Maintenant si le fichier est modifié souvent que les recherches sont toutes
différentes et exécutées dans le cadre d'un traitement automatique qui montre
des problèmes de performance alors la ces méthodes seront insuffisantes surtout
si la mémoire de la machine est insuffisante pour tout garder en mémoire
fichier compris.

> >
> >Existe-t-il un remplaçant pour grep qui effectue une recherche plus
> >rapide genre recherche par dichotomie ?
> >
> >Je souhaite utiliser cela dans un script shell.
> L'option -m de grep permet d'arrêter la recherche une fois 
> trouvée N fois la ligne. Donc si tu prends 1 comme valeur, dès 
> que la ligne est trouvée, il s'arrêtera. Au pire c'est comme si 
> tu parcourais les 14000 lignes (la ligne recherchée se trouve à 
> la fin), au mieux, tu ne parcoureras que quelques centaines de 
> ligne (la ligne recherchée est vers le début). Suivant la 
> fréquence à laquelle tu fais tes recherches et la puissance de ta 
> machine, ca pourra aller ou pas.
> 
> Je ne connais pas d'outil sinon pour faire une recherche par 
> dichotomie et je pense que si j'en avais besoin, avec une boucle 
> 'for' et la commande 'nl' j'arriverai à trouver mon bonheur :)
> 
> Bon we.
> Guillaume
> 
> 
> -- 
> Pensez à lire la FAQ de la liste avant de poser une question :
> http://wiki.debian.net/?DebianFrench
> 
> Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
> 
> To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact 
> listmaster@lists.debian.org

-- 
 Francois Mescam
 



Reply to: