Experimente:
last=$(sed -n '$s/^\([0-9]\+\).*//p')
awk -F ASDF -v last=$last '$1 >= last - 120'
Eu tenho um arquivo de log: link
a primeira coluna, antes do "ASDF" é o mesmo tempo, como na linha dada, mas no tempo unix [eu acho que é mais fácil fazer isso com o tempo unix].
Eu só preciso das linhas que estavam nos últimos 2 minutos:
Terminando: 07:55:08 - a última vez no arquivo de log
Começando: 07:53:09 - no máximo 2 minutos antes da última linha de registro no logfile
A saída do texto pastebined seria:
1295938389ASDF 01 25 07:53:09 router authpriv.notice dropbear[20673]: password auth succeeded for 'root' from 192.168.1.201:43822
1295938401ASDF 01 25 07:53:21 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938401ASDF 01 25 07:53:21 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938508ASDF 01 25 07:55:08 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938508ASDF 01 25 07:55:08 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
Como fazer isso usando apenas ferramentas mínimas * nix? [é um roteador OpenWrt, não perl :(]
então, como fazer isso: saída somente linha (Last log line time - 120sec)?
Obrigado!
Você pode obter o timestamp atual assim:
date +s%
E timestamp atual - 2mins por exemplo:
date -d @$(('date +%s'-120)) +%s
Portanto, você tem dois valores inteiros e deseja arredondar as linhas que começam dentro desse intervalo. Há muitas maneiras de fazer isso (awk, sed, ...)
Exemplo de Sed:
sed -n -e '/start_time_stamp/,/stop_time_stamp/p' log_file
Para outras formas, experimente esta ferramenta magnífica: link