
Hallo Liste. Ich bastele an einem Bash Skript, dass mir /var/log/mail nach vorkommenden Domains durchsuchen soll. Die Domainliste wäre zB example.com example2.com example3.com gelöst ist das momentan in etwa so: function scan_mail { cat /var/log/mail | while read line do if [[ $line =~ "$1" ]] then let counter=$counter+1 fi done } for i in $domainliste do scan_mail $i done Das ganze ist jetzt natürlich nicht sehr effizient, da man das logfile 3x durchlaufen muss. Hat jemand eine Idee, wie man das auch in einem durchlauf für alle Domains erledigen kann? thx :) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Hallo Stefan Stefan König schrieb:
Hallo Liste.
Ich bastele an einem Bash Skript, dass mir /var/log/mail nach vorkommenden Domains durchsuchen soll. Die Domainliste wäre zB example.com example2.com example3.com
gelöst ist das momentan in etwa so:
function scan_mail { cat /var/log/mail | while read line do if [[ $line =~ "$1" ]] then let counter=$counter+1 fi done }
function scan_mail { counter=$( grep $1 /var/log/mail | wc -l ) echo "Domain: <$1>, Counter: <$counter>" } Wäre das etwas für Dich ??
for i in $domainliste do scan_mail $i done
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Hallo, Am Fre, 01 Aug 2008, Axel Birndt schrieb:
Stefan König schrieb: function scan_mail { counter=$( grep $1 /var/log/mail | wc -l ) echo "Domain: <$1>, Counter: <$counter>" }
1. "function" sollte man nicht verwenden. 2. Zeilen zählen kann grep selber: grep -c "$1" /var/log/mail HTH, -dnh -- Am I reading this right? You actually *want* to buy a cell phone? You're one sick puppy.... -- James Bialas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Am Freitag, 1. August 2008 12:02:02 schrieb Stefan König:
Hallo Liste.
Ich bastele an einem Bash Skript, dass mir /var/log/mail nach vorkommenden Domains durchsuchen soll. Die Domainliste wäre zB example.com example2.com example3.com
gelöst ist das momentan in etwa so:
function scan_mail { cat /var/log/mail | while read line do if [[ $line =~ "$1" ]] then let counter=$counter+1 fi done }
for i in $domainliste do scan_mail $i done
Das ganze ist jetzt natürlich nicht sehr effizient, da man das logfile 3x durchlaufen muss. Hat jemand eine Idee, wie man das auch in einem durchlauf für alle Domains erledigen kann?
Bash arrays benutzen $var[$i] oder awk benutzen Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer

Hallo, Am Fre, 01 Aug 2008, Stefan König schrieb:
Ich bastele an einem Bash Skript, dass mir /var/log/mail nach vorkommenden Domains durchsuchen soll.
Nach bekannten Domains? Also welche einer vorgegebenen Liste wie oft vorkommen? Absender oder Empfänger?
function scan_mail { cat /var/log/mail | while read line do if [[ $line =~ "$1" ]] then let counter=$counter+1 fi done }
for i in $domainliste do scan_mail $i done
for adr in $domainliste; do grep -c "$adr" /var/log/mail done Der ganze Aufwand drumrum lohnt nicht. In awk könnte man es z.B. so machen: ==== #!/usr/bin/gawk -f BEGIN { domains = "dhaller.de,endjinn.de"; split(domains, t, ","); for( v in t ) { doms[t[v]] = 0; } } { for ( v in doms ) { if ( $0 ~ v ) { doms[v]++; } } } END { for ( v in doms ) { print v ": " doms[v]; } } ==== Wobei die Initialisierung rel. kompliziert ist, damit man nur einen "String" als Initialisierung angeben muß. Alternativ: === BEGIN { doms["domain.eins"] = 0; doms["domain.zwei"] = 0; # ... } # Rest wie oben ==== Der Vorteil der AWK-Lösungen ist, daß die Datei nur einmal gelesen werden muß. Eine Verfeinerung bzgl. Empfänger/Absender hab ich jetzt weggelassen. HTH, -dnh -- "I think it's a beautiful day to go to the zoo and feed the ducks. To the lions." - Brian Kantor -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Axel Birndt
-
David Haller
-
Dr. Jürgen Vollmer
-
Stefan König