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

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

melhorar script shell


From: SuSE List
Subject: melhorar script shell
Date: Wed, 10 Nov 2004 16:58:48 -0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.2) Gecko/20040803

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


reply via email to

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