mieux que grep ?

9 réponses
Avatar
christian
Bonjour,

dans un script, j'utilise la commande grep pour trouver une chaîne qui est
unique (un hash) dans un fichier texte énorme.

Mon problème est que la commande parcourt tout le fichier même si la
réponse est en première ligne (du coup ça mouline un moment).

ça doit être trivial mais je n'arrive pas à trouver une solution plus
propre.

Merci pour vos réponses

--
Christian

9 réponses

Avatar
Eric Masson
christian writes:
'Lut,
Mon problème est que la commande parcourt tout le fichier même si la
réponse est en première ligne (du coup ça mouline un moment).

Sur un BSD grep, la documentation de l'option -m cadre avec le cas
d'emploi présent.
Cela devrait probablement être similaire avec un GNU grep
raisonnablement récent.
--
Mais comment vous faites pour en trouver des comme ça ?
Pourquoi moi ça ne m'arrive jamais ?
-+- SP in GNU : le lecteur de news a mal configuré son neuneu -+-
Avatar
Nicolas George
christian , dans le message <5ea16473$0$5886$, a
écrit :
dans un script, j'utilise la commande grep pour trouver une chaîne qui est
unique (un hash) dans un fichier texte énorme.
Mon problème est que la commande parcourt tout le fichier même si la
réponse est en première ligne (du coup ça mouline un moment).

Peut-être que c'est le moment de songer à une autre manière de
structurer les données ?
Avatar
Marc SCHAEFER
Nicolas George <nicolas$ wrote:
Peut-être que c'est le moment de songer à une autre manière de
structurer les données ?

oui, je suggérerais un index DBM (p.ex. tied à un Perl hash),
ou une base de données plus complète, en fonction des
besoins.
Avatar
christian
Le Thu, 23 Apr 2020 11:59:00 +0200, Eric Masson a écrit :
christian writes:
'Lut,
Mon problème est que la commande parcourt tout le fichier même si la
réponse est en première ligne (du coup ça mouline un moment).

Sur un BSD grep, la documentation de l'option -m cadre avec le cas
d'emploi présent.

Super !
grep -m 1 correspond à ce que je cherchais
Merci!
--
Christian
Avatar
christian
Le Thu, 23 Apr 2020 10:05:11 +0000, Nicolas George a écrit :
Peut-être que c'est le moment de songer à une autre manière de
structurer les données ?

C'est un fichier livré tel que.
La solution donnée par Eric convient parfaitement au but recherché.
Merci
--
Christian
Avatar
Benoit Izac
Bonjour,
Le 23/04/2020 à 11:48, christian a écrit
dans le message <5ea16473$0$5886$ :
dans un script, j'utilise la commande grep pour trouver une chaîne qui
est unique (un hash) dans un fichier texte énorme.
Mon problème est que la commande parcourt tout le fichier même si la
réponse est en première ligne (du coup ça mouline un moment).
ça doit être trivial mais je n'arrive pas à trouver une solution plus
propre.

Si on a un grep qui ne supporte pas l'option « -m » (ce qui doit être
rare mais, vu que cette option n'est pas POSIX, ça doit sûrement
exister), on peut s'en sortir avec sed :
sed -ne '/le_hash/{p;q}' le_fichier_énorme
--
Benoit Izac
Avatar
christian
Le Thu, 23 Apr 2020 13:05:27 +0200, Benoit Izac a écrit :
sed -ne '/le_hash/{p;q}' le_fichier_énorme

je garde ça dans un coin
merci
--
Christian
Avatar
Nicolas George
christian , dans le message <5ea17248$0$6476$, a
écrit :
C'est un fichier livré tel que.

Ce qui n'impose pas de l'utiliser tel quel.
La solution donnée par Eric convient parfaitement au but recherché.

Au but recherché à court terme, pas à moyen-long terme.
Avatar
christian
Le Thu, 23 Apr 2020 12:15:07 +0000, Nicolas George a écrit :
christian , dans le message <5ea17248$0$6476$, a
écrit :
C'est un fichier livré tel que.

Ce qui n'impose pas de l'utiliser tel quel.
La solution donnée par Eric convient parfaitement au but recherché.

Au but recherché à court terme, pas à moyen-long terme.

Je suis tout à fait d'accord avec toi.
Mais comme je suis bientôt en retraite , l'utilisation que j'en fait est
simplement ludique et c'est par curiosité que je me suis lancé dans
l'écriture d'un script (ce qui n'est pas une excuse, j'en conviens).
Évidemment, si j'avais 25 ans et que je doive en faire mon métier...
--
Christian