PDA

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?