Ich habe eine große sortierte Datei mit Milliarden Zeilen variabler Länge. Angesichts einer neuen Zeile möchte ich wissen, welche Bytenummer sie erhalten würde, wenn sie in die sortierte Datei aufgenommen worden wäre.
Beispiel
a\n
c\n
d\n
f\n
g\n
Bei der Eingabe 'foo' würde ich die Ausgabe 9 erhalten.
Dies ist einfach zu bewerkstelligen, indem einfach die gesamte Datei durchgegangen wird. Da es sich jedoch um Milliarden von Zeilen mit variabler Länge handelt, wäre eine binäre Suche schneller durchzuführen.
Existiert ein solches Textverarbeitungswerkzeug bereits?
Bearbeiten:
Es funktioniert jetzt: https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
text-processing
search
Ole Tange
quelle
quelle
Antworten:
Mir ist kein Standardwerkzeug bekannt, das dies tut. Sie können jedoch Ihre eigenen schreiben. Zum Beispiel sollte das folgende Ruby-Skript den Job erledigen.
Es ist etwas knifflig, da Sie sich nach der Suche normalerweise in der Mitte einer Zeile befinden und daher eine Lesezeile ausführen müssen, um zum Anfang der folgenden Zeile zu gelangen, die Sie lesen und mit Ihrem Schlüssel vergleichen können.
quelle
sort -r
und sortiert sindsort -n
?(Dies ist keine korrekte Antwort auf Ihre Frage, sondern nur ein Ausgangspunkt.)
Ich habe sgrep (sortiert grep) in einer ähnlichen Situation verwendet.
Leider (wir brauchen den aktuellen Stand) hat es keine byte-versetzte Ausgabe; aber ich denke, es könnte leicht hinzugefügt werden.
quelle
Basierend auf Michas Lösung ist hier ein vollständigeres Programm:
https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
quelle