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

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

urgente (melhora no meu script)


From: Rodrigo Monteiro
Subject: urgente (melhora no meu script)
Date: Fri, 27 May 2005 05:54:26 -0700 (PDT)

pessoal, preciso da ajuda de vcs. tenho um script que
le varios arquivos gigantes (1.5GB), processa as
informacoes e salva em outros arquvos.
as linhas desses arquivos sao diferentes umas das
outras, ou seja, nao da pra usar o "cut -d' ' -fX" nem
"awk '{print $X}' pois nao sei as ordens dos campos. o
que eu quero eh pegar somente a "data e hora", o "to"
e o "from".
segue abaixo umas das linhas de um log na integra e o
que eu gerei.

==========
original
==========
May 25 08:02:05 spam postfix/smtpd[27118]: NOQUEUE:
reject: RCPT from unknown[222.108.72.107]: 554 Service
unavailable; Client host [222.108.72.107] blocked
using list.dsbl.org;
http://dsbl.org/listing?222.108.72.107;
from=<address@hidden> to=<address@hidden>
proto=SMTP helo=<222.108.72.107>
==========
processado
==========
May 25 08:02:05 from=<address@hidden>
to=<address@hidden>
==========

o meu script esta aqui em baixo. o que eu gostaria eh
saber se existe um jeito mais rapido e mais facil de
fazer, pois nao gostei do meu script (apesar de estar
fazendo o que eu quero).

==========
script
==========
rm teste0* 2> /dev/null

while read linha ; do
    teste=`grep "to=<" $1 | grep "from=<" | grep
"$linha" | head -n1`
    if [ ! -z "$teste" ] ; then
        grep "to=<" $1 | grep "from=<" | grep "$linha"
>> teste01_"$linha"
    fi
done < rcpthosts.txt

ls -1 teste01_* > arquivos.txt

while read linha02 ; do
    teste=`wc -l $linha02 | awk '{print $1}'`
    for i in `seq 1 $teste` ; do
        alinha=`head -n"$i" $linha02 | tail -n1`
        teste02=`echo "$alinha" | awk '{print NF}'`
        data=`echo $alinha | awk '{print $1,$2,$3}'`
        for j in `seq 1 "$teste02"` ; do
            teste03=`echo "$alinha" | awk '{print
$"'$j'"}'`
            case $teste03 in
                'to=<'*)
                    to=$teste03;;
                'from=<'*)
                    from=$teste03;;
            esac
        done
        echo "$data" "$from" "$to" >>
teste02_"$linha02"
    done
done < arquivos.txt
==========

espero a ajuda de vcs.
[]s

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


reply via email to

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