[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!.