Saída apenas o log dos últimos 2 minutos

1

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!

    
por LanceBaynes 25.01.2011 / 08:12

2 respostas

1

Experimente:

last=$(sed -n '$s/^\([0-9]\+\).*//p')
awk -F ASDF -v last=$last '$1 >= last - 120'
    
por 25.01.2011 / 08:53
1

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

    
por 25.01.2011 / 08:53

Tags