Tengo un gran archivo ordenado con miles de millones de líneas de longitudes variables. Dada una nueva línea, me gustaría saber qué número de byte obtendría si se hubiera incluido en el archivo ordenado.
Ejemplo
a\n
c\n
d\n
f\n
g\n
Dada la entrada 'foo' obtendría la salida 9.
Esto es fácil de hacer simplemente revisando todo el archivo, pero siendo miles de millones de líneas de longitudes variables, sería más rápido hacer una búsqueda binaria.
¿Ya existe una herramienta de procesamiento de texto?
Editar:
Lo hace ahora: https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
text-processing
search
Ole Tange
fuente
fuente
Respuestas:
No conozco alguna herramienta estándar que haga esto. Sin embargo, puedes escribir el tuyo. Por ejemplo, el siguiente script ruby debería hacer el trabajo.
Es un poco complicado porque después de la búsqueda, generalmente estás en el medio de una línea y, por lo tanto, necesitas hacer una línea de lectura para llegar al comienzo de la siguiente línea, que puedes leer y comparar con tu clave.
fuente
sort -r
ysort -n
?(Esta no es una respuesta correcta a su pregunta, solo un punto de partida).
Solía sgrep (grep ordenada) en una situación similar.
Desafortunadamente (necesitamos el estado actual) no tiene una salida de byte-offset; pero creo que podría agregarse fácilmente.
fuente
Basado en la solución Michas, aquí hay un programa más completo:
https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
fuente