Dateiinhalt zeilenweise ausgeben

webm2000

webm2000

Grünschnabel
Hallo, ich bin ein Neuling in der Shellprogrammierung unter Linux und brauche euere Hilfe.
Über eine Aktionfunktion eines Tools lasse ich ein Meldung in eine Datei (inhalt.txt) laufen.
Die Meldung hat diesen Wortlaut:
ITMMeldung.serv00ra:LZ@tcm.local
ITMMeldung = kennzeichnet das es von meinen Monitoringsystem gemeldet wird.
serv00ra = ist der Servername, der die Störung ausgibt.
:LZ = ist der Agententyp, der die Störung erkannt hat.
@tcm.local = ist die Postfachkennung auf dem Meldesystem, welches das Bereitschaftsteam verständig.
Hab jetzt das Probleme,dass wenn mehrere Fehlermeldung in in diese Datei geschreiben werden, dieser auf einmal in einer E-Mail versendet werden.

Inhalt inhalt.txt
servm1:LZ servm2:LZ servm3:LZ

Muss aber jede Fehlermeldung einzell versenden und nach dem Versand muss die Datei gelöscht werden, sobald alle Fehlermeldungen ausgelesen sind.

chmod a+x /tmp/inhalt.txt
meldung=`cat /tmp/inhalt.txt`
VERS=$(echo $meldung | sed "s/:LZ/.Liunx/g")
/usr/bin/mail -s ITMMELDUNG -r ********** ITMMELDUNG."$VERS"@tcm.local

kann mir jemand helfen:hilfe2:
 
Steht dein Zeug alles in EINER Zeile? Also hat deine Datei nur eine Zeile? Dann:

Code:
awk 'BEGIN{OFS="\n";RS= " "} {print gensub(":LZ", ".Liunix", "g");} ' /tmp/inhalt.txt | xargs -i%  /usr/bin/mail -s ITMMELDUNG -r systemmanagement@tcm.de ITMMELDUNG.%.@tcm.local && rm /tmp/inhalt.txt

Pro Zeile ein Eintrag, dann:
Code:
while read LINE; do
/usr/bin/mail -s ITMMELDUNG -r systemmanagement@tcm.de ITMMELDUNG."$(sed 's/:LZ/.Liunx/g' <<< "$LINE")"@tcm.local 
done < /tmp/inhalt.txt && rm /tmp/inhalt.txt
 
Zuletzt bearbeitet:
Hallo smg,

danke! hat genauso funktioniert wie es angedacht war.
Aber bitte kannst du mir deinen Programmiercode für die Zeilenvariante erläutern.
awk 'BEGIN{OFS="\n";RS= " "} {print gensub(":LZ", ".Liunix", "g");} ' /tmp/inhalt.txt | xargs -i% /usr/bin/mail -s ITMMELDUNG -r ********** ITMMELDUNG.%.@tcm.local && rm /tmp/inhalt.txt

Danke!
 
Okay, der setzt den Rekordseperator zu einem Leerzeichen " ", weil ja dein Zeug durch Leerzeichen getrennt war, Outputseperator wird zu \n gesetzt. Dann wird die Substitution mittels gensub() durchgeführt und nach STDOUT geschrieben, dann wirds an xargs gepiped dass dann das programm mail aufruft, % dabei ist jeweils eine Eintrag deiner Liste. Am Ende löschter die Datei.

Das geht bestimmt besser/eleganter, aber mir ist auf die schnelle nix besseres eingefallen! Sorry!

perl -e 'do {s/:LZ/\.Linuix/;system("/usr/bin/mail -s ITMMELDUNG -r ********** TMMELDUNG.$_.@tcm.local")} for split /\s/, <>' /tmp/inhalt.txt
 
Zuletzt bearbeitet:
Zurück
Oben