OVH Cloud OVH Cloud

awk et sed

10 réponses
Avatar
messmate
Bonjour,
comme je suis null dans ce domaine, ca marche p=F4 :(

LOG=3D~/logs/mailfilter.log

cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'| \
sed -e 's/^.*[/][0-9]*$/MAXSIZE_DENY exceeded/' | \
sort|uniq -c|sort -r

Normalement l'output serait ceci:
384 '^Content-Type:.*text/html.*'
261 '<>^(To|Cc):.*rsmith@xs4all.nl'
189 '^(From|Received):.*hotmail.com.*'
110 '^(From|Received|Reply-To):.*yahoo.com.*'
51 '^(From|Received|Reply-To):.*hotmail.com.*'
40 '^Subject:.*adult.*'

Les headers sont activ=E9s dans .mailfilterrc.

Merci d'avance pour votre aide.

--=20
Amicalement
mess-mate

10 réponses

Avatar
Jacques L'helgoualc'h
messmate a écrit, vendredi 25 février 2005, à 16:04 :
Bonjour,



bonjour,

comme je suis null dans ce domaine, ca marche pô :(



Mais non, tu connais l'existence d'Awk et Sed, ça te fait déjà deux
points :)

LOG=~/logs/mailfilter.log



Le format du log n'est pas si simple, et je n'ai pas d'exemple suffisant
sous la main, envoie (en privé si tu préfères) le résultat de la
commande

grep -m 42 '^mailfilter: Deleted' ~/logs/mailfilter.log

cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'|



- UUOC ;)

- awk + sed = sed (ou awk, ça dépend) ;

- plutôt ], mais bon ;

sed -e 's/^.*[/][0-9]*$/MAXSIZE_DENY exceeded/' |



Tes lignes sont bien du genre

mailfilter: Deleted (FROM): (SUJET), (DATE) [RAISON]

?

sort|uniq -c|sort -r



ça, c'est OK.

Normalement l'output serait ceci:
384 '^Content-Type:.*text/html.*'
261 '<>^(To|Cc):.*'
189 '^(From|Received):.*hotmail.com.*'
110 '^(From|Received|Reply-To):.*yahoo.com.*'
51 '^(From|Received|Reply-To):.*hotmail.com.*'
40 '^Subject:.*adult.*'



Qu'obtiens-tu à la place ?

Les headers sont activés dans .mailfilterrc.

Merci d'avance pour votre aide.



EEA,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
fra-duf-no-spam
Le 12839ième jour après Epoch,
Jacques L'helgoualc'h écrivait:

messmate a écrit, vendredi 25 février 2005, à 16:04 :
Bonjour,



bonjour,

comme je suis null dans ce domaine, ca marche pô :(



Mais non, tu connais l'existence d'Awk et Sed, ça te fait déjà deux
points :)



Non, c'est 1 seul point pour les deux ;)

Désolé, c'est vendredi hein?


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
François TOURDE a écrit, vendredi 25 février 2005, à 17:20 :
Le 12839ième jour après Epoch, Jacques L'helgoualc'h écrivait:


[...]
> Mais non, tu connais l'existence d'Awk et Sed, ça te fait déjà deux
> points :)

Non, c'est 1 seul point pour les deux ;)



Ah, ça c'est pour ceux qui n'ont que Perl.

Désolé, c'est vendredi hein?



Ah bon ?
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
messmate
On Fri, 25 Feb 2005 16:57:24 +0100
Jacques L'helgoualc'h <lhh+ wrote:

messmate a écrit, vendredi 25 février 2005, à 16:04 :
Bonjour,



bonjour,

comme je suis null dans ce domaine, ca marche pô :(



Mais non, tu connais l'existence d'Awk et Sed, ça te fait déjà
deux points :)

LOG=~/logs/mailfilter.log



Le format du log n'est pas si simple, et je n'ai pas d'exemple
suffisant sous la main, envoie (en privé si tu préfères) le
résultat de la commande

grep -m 42 '^mailfilter: Deleted' ~/logs/mailfilter.log

cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'|



- UUOC ;)

- awk + sed = sed (ou awk, ça dépend) ;

- plutôt ], mais bon ;

sed -e 's/^.*[/][0-9]*$/MAXSIZE_DENY exceeded/' |



Tes lignes sont bien du genre

mailfilter: Deleted (FROM): (SUJET), (DATE) [RAISON]

?

sort|uniq -c|sort -r



ça, c'est OK.

Normalement l'output serait ceci:
384 '^Content-Type:.*text/html.*'
261 '<>^(To|Cc):.*'
189 '^(From|Received):.*hotmail.com.*'
110 '^(From|Received|Reply-To):.*yahoo.com.*'
51 '^(From|Received|Reply-To):.*hotmail.com.*'
40 '^Subject:.*adult.*'



Qu'obtiens-tu à la place ?

Les headers sont activés dans .mailfilterrc.

Merci d'avance pour votre aide.



EEA,
--
Jacques L'helgoualc'h



Ben oui, je mérite une claque !
Voici :
grep -m 42 '^mailfilter: Deleted' ~/logs/mailfilter.log
mailfilter: Deleted MICROSOFT EMAIL/INTERNET INTERNATIONAL LOTTERY .
: YOU WON IN OUR 2005 INTERNATIONAL EMAIL
LOTTERY PROGRAMS., . [Applied filter: '^(From|FROM):.*(Microsoft|MS
Email Delivery System|Inet Email|Internet Message|Inet Mail Service|MS
Internet|Net Delivery Service|MS Mail System|internet email delivery|MS
Network Delivery|ms network system|MS SecurityServices|Inet Mail Storage
System)']

Et l'ouput de spam-stat:
./spam-stat
1 System)'

C'est tout simplement que j'avais pas de 'Deleted' dans la log.
Faudra que j'élabore un peu plus ou revoi mon système de filtrage.
Je fais passer actuellement les mails par mailfilter et un bayes.
Merci pour ta réponse. ( rien à voir avec vendredi :) )
mess-mate
Avatar
Jacques L'helgoualc'h
messmate a écrit, vendredi 25 février 2005, à 20:44 :
[...]
>> cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'|
>> sed -e 's/^.*[/][0-9]*$/MAXSIZE_DENY exceeded/' |
>> sort|uniq -c|sort -r


[...]
Ben oui, je mérite une claque !



C'est vendredi, tu es gracié.

Voici :
grep -m 42 '^mailfilter: Deleted' ~/logs/mailfilter.log
mailfilter: Deleted MICROSOFT EMAIL/INTERNET INTERNATIONAL LOTTERY .
: YOU WON IN OUR 2005 INTERNATIONAL EMAIL
LOTTERY PROGRAMS., . [Applied filter: '^(From|FROM):.*(Microsoft|MS
Email Delivery System|Inet Email|Internet Message|Inet Mail Service|MS
Internet|Net Delivery Service|MS Mail System|internet email delivery|MS
Network Delivery|ms network system|MS SecurityServices|Inet Mail Storage
System)']

Et l'ouput de spam-stat:
./spam-stat
1 System)'



Un échantillon solitaire, c'est un peu maigre ;)

C'est tout simplement que j'avais pas de 'Deleted' dans la log.
Faudra que j'élabore un peu plus ou revoi mon système de filtrage.



Déjà, le awk '/.../{print $NF}' ne va pas, il y a des espaces dans ton
intitulé de filtre. Remplace ton pipe par

<"$LOG" sed -ne
'/^mailfilter: Delete/s/.*[Applied filter: (.*)] *$/1/p' |
sort|uniq -c|sort -nr

sur un log plus giboyeux...

Tu as peut-être aussi un autre type de rejets à compter (MAXSIZE ?).

à+,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
messmate
On Fri, 25 Feb 2005 21:42:09 +0100
"Jacques L'helgoualc'h" <lhh+ wrote:

messmate a écrit, vendredi 25 février 2005, à 20:44 :
[...]
>> cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'|
>> sed -e 's/^.*[/][0-9]*$/MAXSIZE_DENY exceeded/' |
>> sort|uniq -c|sort -r


[...]
Ben oui, je mérite une claque !



C'est vendredi, tu es gracié.

Voici :
grep -m 42 '^mailfilter: Deleted' ~/logs/mailfilter.log
mailfilter: Deleted MICROSOFT EMAIL/INTERNET INTERNATIONAL LOTTERY .
: YOU WON IN OUR 2005 INTERNATIONAL


EMAIL> LOTTERY PROGRAMS., . [Applied filter:
'^(From|FROM):.*(Microsoft|MS> Email Delivery System|Inet
Email|Internet Message|Inet Mail Service|MS> Internet|Net Delivery
Service|MS Mail System|internet email delivery|MS> Network Delivery|ms
network system|MS SecurityServices|Inet Mail Storage> System)']

Et l'ouput de spam-stat:
./spam-stat
1 System)'



Un échantillon solitaire, c'est un peu maigre ;)

C'est tout simplement que j'avais pas de 'Deleted' dans la log.
Faudra que j'élabore un peu plus ou revoi mon système de filtrage.



Déjà, le awk '/.../{print $NF}' ne va pas, il y a des espaces dans
ton intitulé de filtre. Remplace ton pipe par



Si j'annule les espaces, ca va plus.

<"$LOG" sed -ne
'/^mailfilter: Delete/s/.*[Applied filter: (.*)] *$/1/p' |
sort|uniq -c|sort -nr

sur un log plus giboyeux...



???? Tu pourrais me faire la ligne complète, je vais l'essayer ??
Cela me permettra de faire un script complet qui me fait un résumé de
ce que mailfilter a effectué et ensuite me demande si je veux annuler le
log de mailfilter ou non.
A moins que cela existe déjà ??

Tu as peut-être aussi un autre type de rejets à compter (MAXSIZE ?).



Mon MAXSIZE y est déjà:
./spam-stat
2 MAXSIZE_DENY exceeded
1 System)'
1 Pharm)'
Meric pour l'aide
mess-mate


à+,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact





Avatar
Jacques L'helgoualc'h
messmate a écrit, samedi 26 février 2005, à 11:06 :
On Fri, 25 Feb 2005 21:42:09 +0100
"Jacques L'helgoualc'h" <lhh+ wrote:


[...]
>Déjà, le awk '/.../{print $NF}' ne va pas, il y a des espaces dans
>ton intitulé de filtre. Remplace ton pipe par
>
Si j'annule les espaces, ca va plus.



Que veux-tu dire par « annuler les espaces » ? Je parlais du pipe
d'origine,

cat $LOG |awk '/Deleted/ {print $NF}'|sed 's/]//g'|
# etc.

où l'utilisation du $NF par awk ne garde que le dernier mot du filtre,
ici le System') à la fin de ta regexp de la mort qui tue le Swen...

> <"$LOG" sed -ne
> '/^mailfilter: Delete/s/.*[Applied filter: (.*)] *$/1/p' |
> sort|uniq -c|sort -nr



???? Tu pourrais me faire la ligne complète, je vais l'essayer ??



Elle est (presque) complète, ma ligne ... envoie-moi un échantillon de
tes lignes MAXSIZE, ça fera une instruction sed ou deux à ajouter.

[...]
Mon MAXSIZE y est déjà:
./spam-stat
2 MAXSIZE_DENY exceeded
1 System)'
1 Pharm)'



à+,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
messmate a écrit, samedi 26 février 2005, à 11:48 :
[...]
Pour clarifier: mon MAXSIZE est défini dans .mailfilterrc



Ah, désolé, je parlais des lignes du fichier log.

et ma mailfilter.log se trouve dans ~/logs.
Ci-joint ma spamsort. [...]



J'ai testé sur un vieux mailfilter, il peut y avoir des détails à
reprendre ...

# ----
#!/bin/sh
LOG="${LOG:=~/logs/mailfilter.log}"

<"$LOG" sed -e '# on ne garde que les lignes Deleted,
/^mailfilter: Deleted /!d
# puis on supprime le début
s/.* [(Message|Applied) *//
# et quelques détails inutiles
s/(was|size limit) *//
s/]$//
' | sort | uniq -c | sort -nr
# ----

$ tmp/spamstats.sh
63 MAXSIZE_DENY exceeded
28 duplicate
5 Filter: '^Subject:.*!!!'

à+,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
messmate
On Sat, 26 Feb 2005 13:28:18 +0100
Jacques L'helgoualc'h <lhh+ wrote:

(...)
J'ai testé sur un vieux mailfilter, il peut y avoir des détails à
reprendre ...

# ----
#!/bin/sh
LOG="${LOG:=~/logs/mailfilter.log}"

<"$LOG" sed -e '# on ne garde que les lignes Deleted,
/^mailfilter: Deleted /!d
# puis on supprime le début
s/.* [(Message|Applied) *//
# et quelques détails inutiles
s/(was|size limit) *//
s/]$//
' | sort | uniq -c | sort -nr
# ----

$ tmp/spamstats.sh
63 MAXSIZE_DENY exceeded
28 duplicate
5 Filter: '^Subject:.*!!!'

à+,
--
Jacques L'helgoualc'h



Avec ce script moi j'ai ça :
./spamstats.sh
1 mailfilter: Deleted "Staint Meghan Ospital"
: Viagra - very low price, Fri, 25 Feb 2005
18:23:25 -0800. [Size limit MAXSIZE_DENY exceeded, 74084/50000

1 mailfilter: Deleted "Online Pharmacy" :
Refill, Fri, 25 Feb 2005 19:46:12 -0700. [Size limit MAXSIZE_DENY
exceeded, 51234/50000

1 filter: '^(Subject|SUBJECT):.*(Latest Net
Critical Update|Bug Message|Abort Letter|abort notice|Failure Message |
Mail Delivery failure | Urgent notice | Viagra | Pharm)'

1 filter:'^(From|FROM):.*(Microsoft|MS Email Delivery System|Inet
Email|Internet Message|Inet Mail Service|MS Internet|Net Delivery
Service|MS Mail System|internet email delivery|MS Network Delivery|ms
network system|MS Security Services|Inet Mail Storage System)'

C'est pas la même sortie ??
Ce qui est interressant d'avoir, c'est ce qui a été 'deleted' avec le
nom de l'expéditeur et un peu de 'subject'.
Car il pourrait par exemple m'arriver des mails que j'ai besoin d'avoir
et qui ont été supprimé par mailfilter.
Avec l'expéditeur affiché je peux demander un rappel à
l'expéditeur et aussi adapter ma mailfilterrc avec un ALLOW.

Y'a pas une bonne doc sur le net concernant awk et sed ( pour un
newbie)?
Merci pour l'aide.
mess-mate
Avatar
Jacques L'helgoualc'h
messmate a écrit, samedi 26 février 2005, à 15:24 :
On Sat, 26 Feb 2005 13:28:18 +0100
Jacques L'helgoualc'h <lhh+ wrote:
> (...)
Avec ce script moi j'ai ça :
[...]
C'est pas la même sortie ??



Pas la même version de mailfilter (c'est pour ça que je te demandais des
extraits de /tes/ logs). Essaie avec ces instructions dans le script :

# puis on supprime le début
s/.* [(Size|Applied) *//
# on supprime la taille
/^limit/s:, *[0-9]+/[0-9]+::

à la place de la deuxième.

Ce qui est interressant d'avoir, c'est ce qui a été 'deleted' avec le
nom de l'expéditeur et un peu de 'subject'.



Ah, là ça ne servira sans doute pas à grand chose de faire des
statistiques dessus... Commence par un grep '^mailfilter: Deleted' avant
de raffiner.

Car il pourrait par exemple m'arriver des mails que j'ai besoin d'avoir
et qui ont été supprimé par mailfilter.
Avec l'expéditeur affiché je peux demander un rappel à
l'expéditeur et aussi adapter ma mailfilterrc avec un ALLOW.



D'après tes exemples, le format ressemble à

mailfilter: Deleted $FROM: $SUJET, $DATE. [$RAISON]

mais les séparateurs peuvent se retrouver dans les champs. Tu peux sans
doute avoir une statistique des domaines de From: avec

<"$LOG" sed -ne '/^mailfilter: Deleted/!d
s/^[^@]*@([^ :>]+)>?: .*/1/p' | sort | uniq -c | sort -nr

s'il n'y a pas de @ parasites avant le bon. La variante

<"$LOG" sed -ne '/^mailfilter: Deleted/!d
s/^mailfilter: Deleted ([^@]+[^@]+@[^ :>]+>?): .*/1/p'

essaie d'extraire les $FROM complets ...

Y'a pas une bonne doc sur le net concernant awk et sed ( pour un
newbie)?



Pour vraiment le B.A-BA, http://www.shellunix.com/ en français. Sinon,
http://sed.sf.net/, mais ça devient vite illisible.

Le manuel de référence de Awk est disponible sur
http://www.gnu.org/software/gawk/manual/

mais il est plus complet que simple... gougueule introduction à Awk
donne plusieurs liens.


Pour ne pas être trop HS, il y a des exemples dans les paquets gawk,
mawk --- et même un original-awk pour les gou^Warchéologues.
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact