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

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

Re: [shell-script] melhorar script shell


From: Fábio Batista
Subject: Re: [shell-script] melhorar script shell
Date: Wed, 10 Nov 2004 20:21:29 -0300

Olha, me corrijam se eu estiver errado (o cérebro não anda mais
funcionando tão bem a essa hora), mas vc pode simplificar as tuas
inúmeras chamadas ao GREP e ao SED em algumas poucas. Até em uma só,
mas meus conhecimentos de SED não me permitem chegar a escrever
programas inteiros nele.

Faça uns testes com este aqui: não pude como testar pq não tenho
servidor de email instalado aqui, mas parece que deve resolver teu
problema, se eu não cometi nenhum lapso ao traduzir os comandos:

#!/bin/bash

cd /tmp/pflog

# copia log de e-mail para arq temporario
cp /var/log/mail ./mail.tmp

# edita o mail.tmp "inline", removendo os caracteres inválidos
sed -i -f- mail.tmp << des
  s/[<>,]//g;
  s/  / /g;
des

# extrai as linhas "from"
sed -r -f- mail.tmp << des
  /qmgr/!d;
  /removed/d;
des > from.txt

# prepara as saídas para a extração para pipe e smtp
sed -r -i -f- mail.tmp << des
  /(smtp|pipe)/!d;
  /(smtpd|anvil|warning|cleanup|root)/d;
des

# extrai as linhas "pipe"
sed -r -f- mail.tmp << des
  /pipe/!d;
  /orig_to/!d;
des > to_pipe.txt

# extrai as linhas "smtp"
sed -r -f- mail.tmp << des
  /(pipe|orig_to|connect|qmgr)/d;
des > to_smtp.txt

# geramos só um .tmp
rm mail.tmp

Fábio David Batista
address@hidden
http://fabiobatista.multiply.com

On Wed, 10 Nov 2004 16:58:48 -0200, SuSE List <address@hidden> wrote:
>  Caros amigos,
>  
>  Estou com o seguinte problema e gostaria de saber se podem me ajudar....
>  
>  Estou precisando desenvolver uma aplicação que me gere relatórios sobre 
>  uso do serviço de e-mail, mais especificamente quero saber quanto cada 
>  usuário trafega em meu servidor....Criar a aplicação não é o 
>  problema.....meu problema reside em fazer algo em shell para tratar a 
>  log de e-mail de um server postfix.....eu fiz um shell muito arcaico 
>  (pois sou novo em shell) que me trata uma log de uns 500MB mais ou 
>  menos....porem ela demora quase 30 minutos pra terminar o 
>  trabalho...atende? sim, me atende no que preciso, mas gostaria que me 
>  ajudassem a melhorar este shell e inclusive minimizar o tempo de 
>  processamento, pois qdo executo meu shell, minha CPU vai lá no céu 
>  deixando tudo muito lento....
>  
>  Eis o meu script, por favor, sem muitas risadas, sei que é arcaico e 
>  grosseiro :-P
>  
>  #!/bin/bash
>  cd /tmp/pflog
>  # Copia log de e-mail para arq temporario
>  cp /var/log/mail ./mail.tmp
>  # elimina caracteres invalidos "<>," . Ex: 
>  from=<address@hidden>, size=802100, nrcpt=1
>  # ficando apenas from=address@hidden size=802100 nrcpt=1
>  # pois uso o "espaço" como caracter separador de campos
>  cat mail | sed "s/[<>,]//g" > mail1
>  rm mail
>  # trata espaços duplos em data. Ex. "Oct %%1" pois "Oct%10" só tem um 
>  espaço (%)....
>  cat mail1 | sed "s/  / /g" > mail
>  # traz apenas registros validos de from....Ex:
>  # Nov  7 09:49:29 msp01 postfix/qmgr[22896]: B5306D5F7: 
>  from=<address@hidden>, size=802100, nrcpt=1 (queue active)
>  grep qmgr < ./mail > temp.tmp
>  grep -v removed < ./temp.tmp > from.txt
>  # traz registros validos do tipo "para"
>  egrep "smtp|pipe" < ./mail > temp1.tmp
>  grep -v smtpd < temp1.tmp > temp2.tmp
>  grep -v anvil < temp2.tmp > temp3.tmp
>  grep -v warning < temp3.tmp > temp4.tmp
>  egrep -v "cleanup|root" < temp4.tmp > temp5.tmp
>  grep pipe < temp5.tmp > temp6.tmp
>  grep orig_to < temp6.tmp > to_pipe.txt
>  egrep -v "pipe|orig_to|connect|qmgr" < temp5.tmp > to_smtp.txt
>  rm *.tmp
>  
>  Ate aqui normal...consigo extrair a informação que preciso....porem 
>  queria melhorar isso.....e trazer somente as linhas que eu preciso como 
>  no exemplo abaixo:
>  
>  Para e-mail de origem, eu tenho a log:
>  
>  Nov  7 10:06:49 msp01 postfix/qmgr[22896]: A47DA390E6: 
>  from=<address@hidden>, size=11644, nrcpt=1 (queue active)
>  
>  e queria somente obter isto em um arquivo txt, por exemplo:
>  
>  Nov;7;10:06:49;A47DA390E6;from=address@hidden>;size=11644;nrcpt=1
>  
>  e para e-mail de destino eu tenho duas situações:
>  
>  Nov  7 10:06:49 msp01 postfix/pipe[25709]: A47DA390E6: 
>  to=<address@hidden>, orig_to=<address@hidden>, 
>  relay=cyrus, delay=6, status=sent (mail.mispo.com.br)
>  
>  Nov  7 12:23:59 msp01 postfix/smtp[8726]: CA67A21FB1: 
>  to=<address@hidden>, relay=mx.uol.com.br[200.221.11.51], delay=1, 
>  status=sent (250 Ok: queued as 133A87C188)
>  
>  e eu gostaria de ter como saida apenas isto:
>  
> Nov;7;10:06:49;A47DA390E6;orig_to=address@hidden>;relay=cyrus;status=sent
> Nov;7;12:23:59;CA67A21FB1;to=address@hidden;relay=mx.uol.com.br[200.221.11.51];status=sent
>  
>  
>  Isso é possível?? Alguém pode me ajudar?
>  
>  Desculpem pelo e-mail longo.....
>  
>  []s
>  
>  Marcus Vinicius
>  
> 
>  ---------------------------------------------------------------------
>  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
>  ---------------------------------------------------------------------
>  
> 
>  
>  
>  Yahoo! Grupos, um serviço oferecido por: 
>  
>  
>  
>  
>  
>  
>  ________________________________
>  Links do Yahoo! Grupos
>  
> Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/shell-script/
>   
> Para sair deste grupo, envie um e-mail para:
> address@hidden
>   
> O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do
> Yahoo!.


reply via email to

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