Não estou ciente de alguma ferramenta padrão que faz isso. No entanto, você pode escrever o seu próprio. Por exemplo, o seguinte script Ruby deve fazer o trabalho.
file, key = ARGV.shift, ARGV.shift
min, max = 0, File.size(file)
File.open(file) do |f|
while max-min>1 do
middle = (max+min)/2
f.seek middle
f.readline
if f.eof? or f.readline>=key
max = middle
else
min = middle
end
end
f.seek max
f.readline
p f.pos+1
end
É um pouco complicado, porque depois da busca você está geralmente 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.