Commande recherche texte

Bonjour,

Je vous explique mon problème :
J’ai des fichiers (4096 exactement) contenant des données groupées sur deux lignes, sur une ligne je met les trois premiers caractères du hash md5 d’un mot, puis sur la ligne suivante je met le mot en question, et je continue jusqu’à un fichier d’environ 500Ko compressé.

Jusqu’à maintenant j’utilisais la commande suivante :
*PS : Je vais appeler les trois premiers caractères du hash par une variable disons debut_hash.

zgrep -A1 '^debut_hash$' ./unfichier;

Cela fonctionne très bien. Toutefois j’aimerais maintenant passer à une base plus grande et tant qu’à y être arrêter d’utiliser le format gz qui ralentit le processus maintenant que j’ai de la place à volonté.

Les fichiers feront 30Mo et il est possible de faire une requête jusqu’à plusieurs centaines de hash, étant donné que les trois premiers caractères (même quatre) se retrouvent pas mal de fois sur un fichier de 30Mo, ça fait lourd pour ma commande. C’est bien trop lent.

J’ai essayé avec fgrep pour voir, mais sans raison apparente il me sort moins de réponses, comme s’il ne trouvait pas certains mots. Étrange.

Bref, je cherche le moyen le plus rapide pour chercher les occurrences d’une suite hexadécimale que je connais par avance. En revanche je ne connais pas le mot qui suit. Je précise que je suis aussi preneur d’une nouvelle façon d’ordonner mes fichiers.

Je précise que j’ai essayé en supprimant le retour à la ligne entre la chaine hexa et le mot, et en cherchant toutes les lignes commençant par les trois caractères, mais c’était beaucoup plus lent. Je me dis que c’est parce-que ça se rapproche d’une regexp ?

J’ai aussi essayé de créer un fichier contenant tous les mots et de ne référencer que des offsets donc avec [3 premiers caractères md5][offset]. Cela me permettait de gagner en place puisque l’hexa se stocke mieux.

Voilà, si vous avez une idée je suis preneur :slight_smile:
Merci.