|
|
|
|
Bonjour,
Je tente de developper un outil pour parser les logs postfix, je fais d'abord un
cat $D_LOGS/$v_fich | grep "status=bounced" > bounces.tmp
nom_serveur, email, domaine, cause_bounce, date_badmail
Aug 20 08:57:00 serveurname postfix/smtp[1965]: 732DBD4C867: to=<toto.toto@wanadoo.fr>, relay=smtp.wanadoo.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))
sed '/@/!d;s/^\(.*\)'$(hostname)'.*<\(.*@\(.*\)\)>.*bounced\(.*\)$/'$(hostname)'|\2|\3|\4|\1/' bounces.tmp >>$(hostname).csv
while IFS=$' ' read mois jour heure serveur process id destinataire relay delay delays dsn status infos do echo -e " mois : $mois \n\ jour : $jour \n\ heure : $heure \n\ serveur : $serveur \n\ process : $process \n\ id : $id \n\ destinataire : $destinataire \n\ relay : $relay \n\ delay : $delay \n\ delays : $delays \n\ dsn : $dsn \n\ status : $status \n\ infos : $infos \n"; done < bounces.tmp
extract()
{
local str deb fin temp
str="${1:-''}"
deb="${2:-'<'}"
fin="${3:-'>'}"
$temp = echo ${str#*$deb}
$temp2 = echo ${temp%*$fin}
return $temp2
}
Configuration: Windows XP Internet Explorer 7.0
Salut,
$ cat fich
Aug 20 08:57:00 serveurname postfix/smtp[1965]: 732DBD4C867: to=<toto.toto@wanadoo.fr>, relay=smtp.wanadoo.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))
$ awk '{ print $4","$7$12","$1,$2,$3 }' fich | sed 's/to=<//;s/>//'
serveurname,toto.toto@wanadoo.fr,status=bounced,Aug 20 08:57:00:-))
$ man woman Il n'y a pas de page de manuel pour woman. |
Hello,
|
Euuu encore moi, suis toujours dessus ...
Pour créer un tableau en n'utilisant pas les indices par défaut, on utilisera la syntaxe suivante : > tableau2=([clé0]=valeur0 [clé1]=valeur1 [clé2]=valeur2) Où les clés peuvent être n'importe quelles chaînes de caractères. A un tableau créé avec les index numériques par défaut, on peut très bien ajouter un élément dont la clé est une chaîne de caractères. Donc je fais : Mois=(["Jan"]="01" ["Fev"]="02" ["Aug"]="08" ["Sep"]="09" ["Oct"]="10"); ou Mois=([Jan]="01" [Fev]="02" [Aug]="08" [Sep]="09" [Oct]="10"); et j'obtiens TOUJOURS : echo "numéro du mois ${Mois[Aug]}" >numéro de mois 10 echo "numéro du mois ${Mois['Aug']}" >numéro de mois 10 ...GRRR.... |
Tiens essayes ça : [tmpfs]$ cat fich
Aug 20 08:57:00 serveurname postfix/smtp[1965]: 732DBD4C867: to=<toto.toto@wanadoo.fr>, relay=smtp.wanadoo.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))
Aug 22 09:57:00 monserveur postfix/smtp[1965]: 732DBD4C867: to=<titi.titi@free.fr>, relay=smtp.free.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.free.fr[193.252.22.78] said: 550 <titi.titi@free.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))
[tmpfs]$ cat foo.sh
#! /bin/bash
while read line
do
cause=$(awk -F"(" '{ print "("$2"("$3 }' <<<$line)
DATE=$(awk '{ print $1,$2,$3 }' <<<$line)
NEW_DATE=$(date --date="${DATE}" '+%d/%m/%Y %H:%M:%S')
NEW_line=$(awk '{ print $4","$7$12"," }' <<<$line | sed 's/to=<//;s/>//')
sed "s|\(.*@\)\([^,]*\)\(.*\)|\1\2,\2,${cause},${NEW_DATE}|" <<<$NEW_line
done < fich
[tmpfs]$ ./foo.sh
serveurname,toto.toto@wanadoo.fr,wanadoo.fr,(host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command)),20/08/2008 08:57:00
monserveur,titi.titi@free.fr,free.fr,(host smtp.free.fr[193.252.22.78] said: 550 <titi.titi@free.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command)),22/08/2008 09:57:00
[tmpfs]$ ;-))
$ man woman Il n'y a pas de page de manuel pour woman. |