shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Lista o conteúdo dos últimos 10 min de um arquivo.


From: Julio C. Neves
Subject: Re: [shell-script] Lista o conteúdo dos últimos 10 min de um arquivo.
Date: Wed, 17 Jul 2013 10:56:30 -0300

Vc está 100% certo. Para fazer isso o parâmetro passado teria de ser
totalmente desmontado para dentro de variáveis, para então criar uma regexp
dinâmica.

Para fazer o que vc propôs, há muito tempo postei aqui mesmo na lista 4
programas e, se não me engano, alguns foram aproveitados nas funções zz do
Aurélio e do Thobias.

Para trabalhar com datas fiz o dton.sh e o ntod.sh o primeiro converte data
em número de dias decorridos desde 01/01/1980 (primeiro bissexto após a
criação do UNIX) e o outro faz o oposto, ou seja converte um número em uma
data.

Usando o mesmo princípio, para trabalhar com horas fiz o hton.sh e o
ntoh.sh. Um transforma horas em segundos decorridos aṕos as 00:00:00 e o
outro faz o inverso.

O legal desses bacalhos é que permitem calcular diferenças entre datas e
horários e permite somar dias, datas e horários.

Se vcs quiserem ver, basta procurá-los pelos nomes no histórico da lista.
Se alguém quiser colocar os novos fontes deles (que já foram atualizados
para bash 4.0) em algum site, me peça em pvt que passarei.

Abcs,
Julio
*@juliobash
*



Em 17 de julho de 2013 08:16, João Olavo Baião de Vasconcelos <
address@hidden> escreveu:

> 2013/7/16 Julio C. Neves <address@hidden>
>
> > **
> > Fala João,
> >
> > vamos dizer que ele queira os logs do dia 16 Jul, a partir de 15:21
> >
>
> Mas aí que tá... Ele quer os logs de uma data que está em uma variável pra
> frente.
>
> hora_data="Jul 16 15:21:14"
>
> O que eu perguntei foi como jogar isso para o formato 0716152114 com o
> comando date.
>
> Seria mt mais rápido mesmo se desse para montar isso com o grep, mas teria
> que lidar com passagem de dia (10 minutos antes de Jul 16 00:03:00, por
> exemplo). Teria que montar uma ER dinamicamente pra jogá-la pro grep. Aí
> sim, acredito que ficaria mais rápido mesmo.
>
> Abraços!!
>
> grep -E "Jul 16 (1[5-9]|2[0-3]):[2-5][0-9]" ArqLog
> >
> > ER é bom demais... ;)
> >
> > Abraços na rapaziada aí de Vitória e tb na família.
> > Julio
> > *@juliobash
> > *
> >
> > Em 16 de julho de 2013 17:05, João Olavo Baião de Vasconcelos <
> > address@hidden> escreveu:
> >
> >
> > > Rafael,
> > >
> > > Primeiramente, vc não precisa fazer um cat para depois fazer um grep.
> > Faça
> > > um grep direto no arquivo!
> > >
> > > "ERRADO":
> > > cat arquivo.log | grep "Error" |wc -l
> > >
> > > CORRETO:
> > > grep "Error" arquivo.log | wc -l
> > >
> > > Mas vc quer contar o número de linhas ou mostrar as últimas?
> > >
> > > Mande para cá um exemplo de log contido nesse arquivo.
> > >
> > > Imaginando que seja o seguinte:
> > >
> > > Jul 16 16:25:35 hostname user: blablabla
> > > Jul 16 16:25:48 hostname user: blablabla
> > > Jul 16 16:26:13 hostname user: blablabla
> > > Jul 16 16:27:17 hostname user: blablabla
> > > Jul 16 16:35:59 hostname user: blablabla
> > > Jul 16 16:43:02 hostname user: blablabla
> > >
> > > Vc teria que obter a data atual, menos 10 minutos:
> > > date -d "-10 minutes" +"%b %d %H:%M:%S"
> > >
> > > E agora teria que filtrar por todos os resultados que são maiores ou
> > iguais
> > > à data e hora acima.
> > >
> > > Poderia ser de um jeito mais pedante, comparando linha a linha se a
> data
> > é
> > > maior que 10 min (ignorando o fato de isso poder demorar e qd vc olhar
> a
> > > última linha pode já ter passado mais 1 min e estaria mostrando coisa
> que
> > > aconteceu há 11 min... E ignorando que estou ignorando o ano (como é o
> > caso
> > > do /var/log/messages)).
> > >
> > > Não consegui concluir o exemplo abaixo, mas é um começo. Não consegui
> pq
> > eu
> > > não sei como pegar uma string em um formato específico e imprimir com o
> > > comando date em outro formato. Alguém poderia me ajudar nisso??
> > >
> > > Exemplo considerando o meu exemplo de log, que NÃO FUNCIONA, é só uma
> > > ideia:
> > >
> > > MINUTOS_BASE=10
> > > DATA_HORA_BASE=$(date -d "-$MINUTOS_BASE minutes" +"%m%d%H%M%S")
> > > # Teria que transformar o conteúdo da variárvel DATA_HORA_BASE para um
> > > formato somente numérico, tipo 0716164302, para poder comparar
> > > numericamente. #comofas??
> > >
> > > while read LINHA
> > > do
> > > DATA_HORA=$(awk '{print $1 $2 $3}')
> > >
> > > # Teria que transformar o conteúdo da variárvel DATA_HORA para um
> formato
> > > somente numérico, tipo 0716164302, para poder comparar numericamente.
> > > #comofas??
> > >
> > > [ $DATA_HORA -ge $MINUTOS_BASE ] && echo $linha
> > > done <<< "$(cat arquivo.log)"
> > >
> > > Dê um "man date" e veja os formatos existentes para imprimir as datas e
> > > horas (%Y para ano, %m para o número do mês, etc), e adequar para o
> > formato
> > > do seu log.
> > >
> > > Bom, é só uma ideia para vc ir buscando soluções.
> > >
> > >
> > >
> > >
> > > 2013/7/15 rafael cruz <address@hidden>
> > >
> > > > **
> >
> > > >
> > > >
> > > > Boa noite!
> > > >
> > > > Pessoal estou com um problema na filtragem de um arquivo. estou
> fazendo
> > > > uma contagem de erro em um log, porém estou fazendo a leitura do log
> > por
> > > > inteiro e estou precisando pegar apenas a escrita dos últimos 10 min
> > por
> > > > exemplo.
> > > >
> > > > Estou utilizando filtragem básica cat arquivo.log | grep "Error" |wc
> > -l,
> > > > porém ele faz o check no arquivo inteiro.
> > > > Se alguém souber qual comando devo pesquisar melhor para resolver
> isso
> > > > agradeço pois deu umas "googladas" e não achei.
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > João Olavo Baião de Vasconcelos
> > > Analista de Sistemas - Infraestrutura
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------------------------------
> > >
> > > ----------------------------------------------------------
> > > Esta lista não admite a abordagem de outras liguagens de programação,
> > como
> > > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > > prévio aviso.
> > > ----------------------------------------------------------
> > > Sair da lista: address@hidden
> > > ----------------------------------------------------------
> > > Esta lista é moderada de acordo com o previsto em
> > > http://www.listas-discussao.cjb.net
> > > ----------------------------------------------------------
> > > Servidor Newsgroup da lista: news.gmane.org
> > > Grupo: gmane.org.user-groups.programming.shell.brazil
> > >
> > > Links do Yahoo! Grupos
> > >
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
>
> --
> João Olavo Baião de Vasconcelos
> Analista de Sistemas - Infraestrutura
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]