Além de dividir o arquivo em alguns arquivos menores, você pode simplesmente abrir o arquivo e procurá-lo para algo que possa ser visto como próximo do fim do arquivo.
Depois disso, você lê o máximo de linhas possíveis e, se alcançar EOF
sem todas as suas 10000000 linhas desejadas, você só precisará fazer um diff na primeira posição você adivinhou , e uma nova posição - anterior - e tente ler as linhas n = diff .
Eu realmente não sei se tail
faz isso, ou se há alguma ferramenta POSIX disponível que realiza este tipo de operação; implementar isso não deve levar mais de cinco minutos, eu acho (:
Isso pode ser de alguma ajuda.