Archiv verlassen und diese Seite im Standarddesign anzeigen : Output eines Commands verändern
Los_Andros
26-11-2003, 13:57
Hallo Leute,
Ich schreibe gerade ein Script und habe ein Problem.
folgenden output habe ich zur Verfügung
Statistics for file system IZ00382.OMVS.IZT1.HFS
( 11/26/03 2:43pm )
File system size:_____72804 (pages)
_______284.391(MB)
Used pages: _____44504 (pages)
_______173.844(MB)
Attribute pages: _______319 (pages)
_________1.246(MB)
Jetzt interessieren mich eigentlich nur die Werte (die in MB), die ich gerne an Variablen übergeben möchte.
Folgendermaßen hatte ich mir das gedacht.
Mit awk kann ich den Output ja manipulieren, beispielsweise so:
# confighfs /u/iz00382 |grep "File system size:" | awk '{ printf "%s\n",$3 }'
das gibt mir aber folgenden Output
size:_____72804
Mich interessiert aber nur 72804 oder besser eigentlich die Zeile danach also 173.844
Wie kann ich das machen?
peschmae
26-11-2003, 14:43
du kannst bei grep mit der Option -A oder --after-context= eine Zahl angeben, wie viele Zeilen nach der Zeile, in der der gesuchte Ausdruck gefunden wurde, ausgegeben werden sollen.
Dann kannst du ja (jetzt wirds ganz ineffizient ;)) noch n "grep -v" auf die erste Zeile loslassen:
confighfs /u/iz00382 |grep -A 1 "File system size:" | grep -v "File system size:" | awk
aber das mit Awk musst du machen :D
MfG Peschmä
Los_Andros
26-11-2003, 14:51
Leider unterstützt unser Unix die -A Option nicht von grep.
Ich hab jetzt doch ne Lösung gefunden, aber irgendwie ist die auch schräg,
was haltet Ihr davon (bin für Verbesserungsvorschläge immer offen ;-)
confighfs / |sed -e 's#_# #g' |grep MB| sed -e 's#(MB)# #g' |sed -n '1p'
Ergebnis:
1181.953
Also ich ersetze alle _____ mit Leerzeichen, dann mach ich einen grep nach MB, ersetze (MB) mit Leerzeichen und gibt dann die entsprechende Zeile aus.
Die vier Zeilen würde er ausgeben:
1181.953
1039.055
2.805
3.605
Und dann pick ich mir die entsprechende raus und schreib die in en Variable.
Scheint mir aber nicht besonders Effektiv zu sein, da ich für 4 Variablen 4x confighfs mit samt seinen seds und greps aufrufen muß.
Wäre es da besser die 4 Zeilen in eine Datei zwischenzuspeichern und dann auszulesen?
RapidMax
26-11-2003, 15:33
TMP=`confighfs / | tail +3 | grep MB | sed -e 's#^_*\([0-9.]*\).*$#\1#g'`
NUM1=`echo -n "$TMP" | head -1`
NUM2=`echo -n "$TMP" | awk "BEGIN { l=2; } { if (NR==l) print $1; }"`
NUM3=`echo -n "$TMP" | tail -1`
Mit deinen Test-Daten funktioniert es. Könnte sein, das einige der Optionen auf deiner Plattform nicht vorhanden sind.
Gruss, Andy
Badsteve
26-11-2003, 15:37
perl -ne 'print $1, $/ if m/_+(.+)?\(MB\)/ig'
falls es perl sein darf.
Steve
Los_Andros
26-11-2003, 16:43
danke schonmal,
Ich werde mal morgen weitertesten, muß jetzt heim ;-)
p.s.
Perl geht leider nicht, da es auf unseren Produktivsystemen nicht installiert ist, deshalb bin ich sozusagen auf die Shellmittel angewiesen.
awk und sed sind aber überall dabei
Los_Andros
01-12-2003, 11:29
Also es hat eigentlich alles funktioniert,
Ich würde jetzt gerne mienen Output in ein log file schreiben.
Dieses Logfile soll formatiert sein.
Etwa so:
Datum1 Output1
Output1
Output1
Datum2 Output2
Output2
Datum3 Output3
.....
hab das mal so probiert
date >./log/zfsaf.log 2>&1; tso "ren 'XYZ' 'XYZ.BKUP'" >> ./log/zfsaf.log 2>&1
Aber dann sieht es so aus:
Datum1
Output1
Otuput1
Output1
Datum2
Output2
.....
Wie bekomme ich das hin?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.