Eu tenho um grande arquivo classificado com bilhões de linhas de comprimentos variáveis. Dada uma nova linha, eu gostaria de saber qual número de bytes obteria se tivesse sido incluído no arquivo classificado.
Exemplo
a\n
c\n
d\n
f\n
g\n
Dada a entrada 'foo', eu obteria a saída 9.
Isso é fácil, basta percorrer todo o arquivo, mas, sendo bilhões de linhas de tamanhos variáveis, seria mais rápido fazer uma pesquisa binária.
Essa ferramenta de processamento de texto já existe?
Editar:
Faz agora: https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
text-processing
search
Ole Tange
fonte
fonte
Respostas:
Não estou ciente de alguma ferramenta padrão fazer isso. No entanto, você pode escrever o seu próprio. Por exemplo, o seguinte script ruby deve fazer o trabalho.
É um pouco complicado porque, após a busca, você geralmente fica no meio de alguma linha e, portanto, precisa fazer uma linha de leitura para chegar ao início da linha seguinte, que você pode ler e comparar com a sua chave.
fonte
sort -r
esort -n
?(Esta não é uma resposta correta para sua pergunta, apenas um ponto de partida.)
Eu usei o sgrep (grep classificado) em uma situação semelhante.
Infelizmente (precisamos do estado atual), ele não possui uma saída de desvio de bytes; mas acho que poderia ser facilmente adicionado.
fonte
Baseado na solução Michas, aqui está um programa mais completo:
https://gitlab.com/ole.tange/tangetools/blob/master/bsearch/bsearch
fonte