J'ai un gros fichier trié avec des milliards de lignes de longueurs variables. Étant donné une nouvelle ligne, je voudrais savoir quel numéro d'octet il obtiendrait s'il avait été inclus dans le fichier trié.
Exemple
a\n
c\n
d\n
f\n
g\n
Étant donné l'entrée 'foo', j'obtiendrais la sortie 9.
C'est facile à faire en parcourant tout le fichier, mais étant des milliards de lignes de longueurs variables, il serait plus rapide de faire une recherche binaire.
Un tel outil de traitement de texte existe-t-il déjà?
Éditer:
Il le fait maintenant: https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
text-processing
search
Ole Tange
la source
la source
Réponses:
Je ne suis pas au courant d'un outil standard faisant cela. Cependant, vous pouvez écrire le vôtre. Par exemple, le script ruby suivant devrait faire le travail.
C'est un peu délicat car après la recherche, vous êtes généralement au milieu d'une ligne et devez donc faire une ligne de lecture pour arriver au début de la ligne suivante, que vous pouvez lire et comparer à votre clé.
la source
sort -r
etsort -n
?(Ce n'est pas une bonne réponse à votre question, juste un point de départ.)
J'ai utilisé sgrep (grep trié) dans une situation similaire.
Malheureusement (nous avons besoin de l'état actuel), il n'a pas de sortie à décalage d'octet; mais je pense que cela pourrait être facilement ajouté.
la source
Basé sur la solution Michas, voici un programme plus complet:
https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
la source