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

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

Re: [shell-script] Separacao de Logs


From: Fábio Batista
Subject: Re: [shell-script] Separacao de Logs
Date: Sun, 10 Jul 2005 18:22:38 -0300

Marcus,

Perdoe minha ignorância. Realmente não li o seu email e já o julguei mal.

Como pedido de desculpas, aceite o script funcionando. Fiz duas
adaptações: uma separa o bloco que deve ser trabalhado, para não pegar
entregas relativas a outro email. E outra adaptação permite pegar mais
de um delivery.

Veja se os resultados estão de acordo:

[fabio@elefante testes]$ ./emaillog.sh "emaillog.txt" "address@hidden"
@4000000042d049172f67cbac info msg 287126: bytes 44605 from
<address@hidden> qp 31722 uid 89
@4000000042d049172fa8283c starting delivery 272680: msg 287126 to
local address@hidden
@4000000042d049172fa97444 starting delivery 272681: msg 287126 to
local address@hidden
@4000000042d049173140ecc4 delivery 272681: failure: user_is_over_quota/
@4000000042d049173146ff74 delivery 272680: failure: user_is_over_quota/

[fabio@elefante testes]$ ./emaillog.sh "emaillog.txt" "address@hidden"
@4000000042d0491315a43304 info msg 287126: bytes 966 from
<address@hidden> qp 31504 uid 89
@4000000042d0491315df3094 starting delivery 272679: msg 287126 to
local address@hidden
@4000000042d049131831e6ac delivery 272679: success: did_0+0+1/



E o script:

[fabio@elefante testes]$ cat emaillog.sh
#!/bin/bash
# vim:ts=2:

FILE="$1"
EMAIL="$2"

# busca todas as mensagens com o email especificado
MSGS=`fgrep "from <$EMAIL>" $FILE`

# define IFS para \n
IFS=\

for LINE in $MSGS
do
  MSG_ID=`echo "$LINE" | sed -r 's/.*msg ([0-9]+).*/\1/'`

  sed -rn "/info msg $MSG_ID: bytes [0-9]+ from <$EMAIL>/,/end msg
$MSG_ID/ p" "$FILE" > /tmp/msgblock

  DEL_ID=`sed -rn "s/.*delivery ([0-9]+): msg $MSG_ID.*/\1/p" /tmp/msgblock`
  DEL_ID="(`tr '\n' '|' < <(echo "$DEL_ID")`------)"

  EXPR="(info msg $MSG_ID: bytes)|(starting delivery $DEL_ID: msg
$MSG_ID)|(delivery $DEL_ID:)"
  egrep -e "$EXPR" /tmp/msgblock

  rm /tmp/msgblock
done


-- 
Fábio David Batista
address@hidden
http://nerd-o-matic.blogspot.com


On 7/9/05, Marcus Vinicius <address@hidden> wrote:
> Eu nao perdi o script (o mesmo consta em minha
> mensagem ), e utilizo ele .
> 
> Só queria saber se é possível alguma alteração para o
> problema apresentado em meu primeiro e-mail.
> 
> Você leu minha mensagem?
> 
> Vinicius
> 
> --- Fábio Batista <address@hidden>
> escreveu:
> 
> 
> ---------------------------------
> Você perdeu o script que tinha solicitado
> anteriormente?
> 
> Antes de submeter novamente sua dúvida, é melhor
> verificar o histórico
> das listas que assina.
> 
> http://br.groups.yahoo.com/group/sed-br/message/3022
> 
> Dia 19 de março, lista sed-br:
> > Valeu amigo ajudou bastante,
> > Era isso mesmo que eu precisava
> 
> ...
> 
> --
> Fábio David Batista
> address@hidden
> http://nerd-o-matic.blogspot.com
> 
> On 7/9/05, Marcus Vinicius <address@hidden>
> wrote:
> > Boa Noite pessoal,
> >
> > Eu tenho o seguinte arquivo de log de e-mail (e mais
> > facil colar ele num txt para visualizacao mais
> limpa)
> > :
> >
> >
> > cat log.txt
> >
> >
> > @4000000042d049122b346acc status: local 1/50 remote
> > 0/100
> > @4000000042d049122cc109f4 delivery 272678: success:
> > did_0+0+1/
> > @4000000042d049122cc39e1c status: local 0/50 remote
> > 0/100
> > @4000000042d049122cc55b6c end msg 287239
> > @4000000042d0491315a413c4 new msg 287126
> > @4000000042d0491315a43304 info msg 287126: bytes 966
> > from <address@hidden> qp 31504 uid 89
> > @4000000042d0491315df3094 starting delivery 272679:
> > msg 287126 to local address@hidden
> > @4000000042d0491315e389dc status: local 1/50 remote
> > 0/100
> > @4000000042d049131831e6ac delivery 272679: success:
> > did_0+0+1/
> > @4000000042d049131834403c status: local 0/50 remote
> > 0/100
> > @4000000042d04913183643dc end msg 287126
> > @4000000042d049172f67b43c new msg 287126
> > @4000000042d049172f67cbac info msg 287126: bytes
> 44605
> > from <address@hidden> qp 31722 uid 89
> > @4000000042d049172fa8283c starting delivery 272680:
> > msg 287126 to local
> > address@hidden
> > @4000000042d049172fa8765c status: local 1/50 remote
> > 0/100
> > @4000000042d049172fa97444 starting delivery 272681:
> > msg 287126 to local
> > address@hidden
> > @4000000042d049172fa983e4 status: local 2/50 remote
> > 0/100
> > @4000000042d049173140ecc4 delivery 272681: failure:
> > user_is_over_quota/
> > @4000000042d0491731454ddc status: local 1/50 remote
> > 0/100
> > @4000000042d049173146ff74 delivery 272680: failure:
> > user_is_over_quota/
> > @4000000042d049173148822c status: local 0/50 remote
> > 0/100
> > @4000000042d04917328a8b94 bounce msg 287126 qp 31733
> > @4000000042d04917328b9d04 end msg 287126
> > @4000000042d0491732b554b4 new msg 287256
> > @4000000042d0491732b5606c info msg 287256: bytes
> 45202
> > from <> qp 31733 uid 1009
> > @4000000042d0491732fef844 starting delivery 272682:
> > msg 287256 to local
> > address@hidden
> > @4000000042d0491732ff1b6c status: local 1/50 remote
> > 0/100
> >
> > POis bem, percebam a linha que tem o e-mail
> > address@hidden, Este e-mail é o que eu tenho
> > como parâmetro. Eu preciso separar os logs referente
> a
> > este e-mail. Mas vcs podem verificar que o servidor
> > não separa os logs certinho por envio, e sim deixa
> > tudo bagunçado .
> >
> >
> > Abaixo eu separei manualmente o log completo refente
> a
> > este envio ficou assim:
> >
> >
> >
> > @4000000042d0491315a413c4 new msg 287126
> > @4000000042d0491315a43304 info msg 287126: bytes 966
> > from <address@hidden> qp 31504 uid 89
> > @4000000042d0491315df3094 starting delivery 272679:
> > msg 287126 to local address@hidden
> > @4000000042d049131831e6ac delivery 272679: success:
> > did_0+0+1/
> > @4000000042d04913183643dc end msg 287126
> >
> >
> > Isso que eu desejo.
> >
> > Vejam que o significado do log para facilitar o
> > entendimento:
> >
> > logo na primeira linha ele apresenta um id do envio
> > new msg 287126
> > depois ele relaciona o id com o endereço que eu
> tenho
> > a 3 linha é importante pois ele relaciona o id
> 287126
> > com um outro id delivery 272679: msg 287126
> > e na 5 linha ele através deste segundo id me informa
> > se a mensagem foi corretamnete enviada: delivery
> > 272679: success
> >
> > Então utilizo o seguinte script ( que um amigo da
> > lista contribui comigo um tempo atras):
> > <<<<<# ./script.sh log.txt address@hidden
> >>>>>
> >
> > cat script.sh
> >
> > #!/bin/bash
> >
> > FILE=$1
> > EMAIL=$2
> >
> > # busca todas as mensagens com o email especificado
> > MSGS=`fgrep "from <$EMAIL>" $FILE`
> >
> > # define IFS para \n
> > IFS=\
> >
> > for LINE in $MSGS
> > do
> >   MSG_ID=`echo "$LINE" | sed -r 's/.*msg
> > ([0-9]+).*/\1/'`
> >   DEL_ID=`sed -rn "s/.*delivery ([0-9]+): msg
> > $MSG_ID.*/\1/p" "$FILE"`
> >
> >   #echo "MSG ID: $MSG_ID"
> >   #echo "DEL ID: $DEL_ID"
> >
> >   egrep -e "(info msg $MSG_ID: bytes)|(starting
> > delivery $DEL_ID: msg
> > $MSG_ID)|(delivery $DEL_ID:)" "$FILE"
> > done
> >
> >
> > Ele funciona quase bem, pois ele só me tras o
> > resultado que indiquei acima se o ID 287126 ( que eu
> > recebo na variavel "$MSG_ID" ) só existir uma vez no
> > arquivo o que não é o caso.
> > Ou seja a variavel $MSG_ID se repete varias vezes e
> > ele pega varios logs que eu nao quero, como poderia
> > fazer para ele pegar apenas os logs que se referem
> ao
> > e-mail address@hidden ?
> > Obs: o ID delivery é unico , não se repete no
> arquivo,
> > porem o Id mensage repete varias vezes.
> >
> > O e-mail é grande mas Se alguem puder me ajudar
> > ficaria muito grato.
> >
> > Abraços!
> >


reply via email to

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