Se não houver um comando que permita fazer (como sugerido por Wiese), por que você não cria um índice externo do seu arquivo?
Apenas a ideia: você pode fazer um script que seja executado para sempre (ou quase veja as notas abaixo) e forneça os intervalos de tempo para criar o índice.
PIDofThisInstance=$$
# ... you code for the header, checks...
while true ; do
# This is the core of your cycle
sync # Maybe
CurrentSize='ls -s $MyFile | awk '{print $1} ' '
CurrentTime='date +"%Y%m%d%H%M%S"'
echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
sleep $TimeToSleep
# if (exit-condition)
# then
# break #Exit from the infinite loop.
# fi
done
Depois que você pode fazer outro script que, dada a data / hora inicial / final, responde a você com os tamanhos inicial / final. A partir desses números, você pode cortar seu arquivo.
Você disse que é um arquivo enorme. Então eu não sugiro que você faça com linenumbers e
talvez head MyFile.log -n xxx | tail -n yyy
. Será longo. Melhor trabalhar com tamanho.
Notas:
- Se este for um log com uma saída formatada (mesmo que seja desconhecido por você), é sempre possível que exista alguma ferramenta de análise da empresa / programador desenvolvedor. É possível que sairá mesmo depois de anos. IMHO melhor não toque nesse formato e crie um arquivo separado.
- Escreva no seu parâmetro de script como PID atual (no caso de você precisar matar pelas mãos), o nome do arquivo (objeto do logging), caso saiba o PID do programa que gera o log ...
- O ciclo pode ser para sempre ou final se você tiver uma condição como: o PID do programa que gera o log não existe mais, o arquivo não existe mais, o tamanho real é menor do que o antigo (você move o arquivo ou reinicia o log para reiniciar a indexação).
- Se você mantiver na memória o $ LastSize, pode decidir evitar imprimir linhas no "log do log" quando não for necessário, ou parar após um longo tempo sem atividade (ou modificar dinamicamente o intervalo de tempo. .)