Vou ver o awk ent�o mas...
Para isolar certas palavras eu consegui assim:
Linha original:
Jun 24 09:42:10 ns1 sendmail[15918]: g5OCfXL15918:
from=<[EMAIL PROTECTED]>, size=120442, class=0, nrcpts=1,
msgid=<[EMAIL PROTECTED]>, proto=ESMTP, daemon=MTA,
relay=silva5.uol.com.br [200.231.206.218]
Primeiro eu peguei a singularidade do e-mail o seu ID no sendmail
g5OCfXL15918:
[root@ns1 /root]# cat /var/log/maillog.1 | grep 'g5OCfXL15918' | cut -f2 -d
"<" | cut -f1 -d ">"
[EMAIL PROTECTED]
Mas o problema agora � quando eu pesquiso por g5OCfXL15918, vem muitas
linhas na listagem, eu vou fazer um loop para pegar a primeira linha que tem
o endere�o de from e a segunda que eu pego o endere�o de to.
Procurei algum parametro no cut e no grep mas eles nao me possibilitam pegar
determinada linha da pesquisa? Estou enganado? Existe essa possibilidade?
Abaixo te mando como esta ficando o script, leva em considera��o que este �
de um iniciante, sem gracinhas :-)
#!/bin/bash
echo
"-----------------------------------------------------------------------"
echo " Relatorio semanal de viroses interceptadas"
echo
"-----------------------------------------------------------------------"
echo
CONTA=0
cat /var/log/maillog.1 | grep 'sendmail' | while read LIN
do
CONTA=$((CONTA+1))
case $CONTA in
1 )
CAR=$(echo $LIN | cut -f4 -d " ")
echo -n "Servidor : "
echo $CAR
;;
* )
;;
esac
done
echo
echo "Intervalo : "
INI=1
FIM=`cat /var/log/maillog.1 | grep 'sendmail' -c` # | cut -f1 -d " "
#echo $INI " " $FIM
CONTA=0
cat /var/log/maillog.1 | grep 'sendmail' | while read LIN
do
CONTA=$((CONTA+1))
case $CONTA in
1 )
CAR=$(echo $LIN | cut -f3 -d " ")
echo -n $CAR
echo -n " do dia "
CAR=$(echo $LIN | cut -f2 -d " ")
echo -n $CAR
echo -n " de "
CAR=$(echo $LIN | cut -f1 -d " ")
echo -n $CAR
;;
$FIM )
echo -n " <<< >>> "
CAR=$(echo $LIN | cut -f3 -d " ")
echo -n $CAR
echo -n " do dia "
CAR=$(echo $LIN | cut -f2 -d " ")
echo -n $CAR
echo -n " de "
CAR=$(echo $LIN | cut -f1 -d " ")
echo $CAR
;;
* )
;;
esac
done
echo
echo
"-----------------------------------------------------------------------"
echo
"-----------------------------------------------------------------------"
echo -n "Foram encontrados um total de "
totvir=`cat /var/log/maillog.1 | grep '>>>' -c`
echo -n $totvir
echo " viroses na semana."
echo
echo "Os virus encontrados foram: "
cat /var/log/maillog.1 | grep '>>>' | #cut -f2 -d "'" |
while read linhas
do
CAR=$(echo $linhas | cut -f2 -d "'" )
echo
echo -n $CAR
CAR=$(echo $linhas | cut -f3 -d " " )
echo -n " >>> " $CAR
CAR=$(echo $linhas | cut -f2 -d " " )
echo -n " " $CAR
CAR=$(echo $linhas | cut -f1 -d " " )
echo -n " " $CAR
CAR=$(echo $linhas | cut -f3 -d "/" )
echo -n " " $CAR
done
echo "--------------------------------------------------------"
echo "Emis�o: "
echo `date +%d/%m/%Y` " as " `date +%T`
echo
echo "--------------------------------------------------------"
> Para isolar algumas colunas... eu prefiro usar o awk... acho que vc
poderia
> fazer da seguinte forma:
>
> # cat /var/log/maillog | grep '>>>' | awk '{print $8}'
>
> ou seja... ele vai pegar a 8a coluna, 'W32/Hybris-B'
>
> Mas se vc quiser pegar sem as '', vc pode tentar:
>
> # cat /var/log/maillog | grep '>>>' | awk -F "'" {print $1}
>
> nese caso, o parametro -F do awk vai dizer qual eh o separador entre as
> colunas que vc vai pegar... se vc da o comando sem o -F, o delimitador
> padrao eh o espaco...
>
> Nao deu pra testar se isso funciona aqui, pq sou obrigado a trabalhar numa
> estacao rw$, mas se nao funcionar o $1, tente $2... e depois me fala se
deu
> certo, se nao a gente arruma outro jeito :)
>
> []'s
>
> Andre Aun
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of Luiz Carlos
> Nebenzahl
> Sent: s�bado, 6 de julho de 2002 12:55
> To: linux-br
> Subject: Re: (linux-br) pequena ajuda em shell script
>
>
> Caros amigos Andre e Alessandro:
>
> Agrade�o muito a ajuda, ambas as dicas funcionaram, e eu estou aprendendo
os
> fundamentos desta linguagem.
>
> Mas abusando da boa vontade de voc�s, eu estou usando o o cut para poder
> isolar certos fragmentos das linhas, no caso da linha abaixo eu pego s� o
> nome do virus:
>
> Jul 4 20:31:36 ns1 mailscanner[2072]: >>> Virus 'W32/Hybris-B' found in
> file ./g64NV1L02571/an�o porn�.scr
>
> # cat /var/log/maillog | grep '>>>' | cut -f2 -d "'"
> W32/Hybris-B
>
> Mas eu sou obrigado a me apoiar nas plicas ' ou seja, eu pego o
que
> esta entre elas. Existe alguma maneira de pegar alguma palavra sem se
apoiar
> em balizas?
>
>
>
> Luiz Carlos Nebenzahl
>
>
>
>
>
Assinantes em 06/07/2002: 2222
Mensagens recebidas desde 07/01/1999: 174114
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]