awk problem
awk problem
Hi Leute
hoffe es geht euch allen gut hier. ich melde mich auch mal ja
also ich hab eine frage zu awk und zwar habe ich folgende situation
aus einem logfile ergibt sich immer folgendes:
name: test1
state: Up
serverID: 2802
load: 39
maxCache: 20000
cached: 12
active: 12
stale: 0
pending: 0
pendingOut: 0
watched: 12
name: test2
state: Up
serverID: 510
load: 6951
maxCache: 100000
cached: 21212
active: 21212
stale: 0
pending: 0
pendingOut: 0
watched: 21212
nun muss ich immer dass watched haben .. ABER nur das watched von test2 und nicht das von test1 das scirpt sollte aber so flexibel sein, dass wenn jetzt z.b. noch ein test3 hinzukommt, dass es dann trotdzem noch funktioniert.
grüsse
CaT
hoffe es geht euch allen gut hier. ich melde mich auch mal ja
also ich hab eine frage zu awk und zwar habe ich folgende situation
aus einem logfile ergibt sich immer folgendes:
name: test1
state: Up
serverID: 2802
load: 39
maxCache: 20000
cached: 12
active: 12
stale: 0
pending: 0
pendingOut: 0
watched: 12
name: test2
state: Up
serverID: 510
load: 6951
maxCache: 100000
cached: 21212
active: 21212
stale: 0
pending: 0
pendingOut: 0
watched: 21212
nun muss ich immer dass watched haben .. ABER nur das watched von test2 und nicht das von test1 das scirpt sollte aber so flexibel sein, dass wenn jetzt z.b. noch ein test3 hinzukommt, dass es dann trotdzem noch funktioniert.
grüsse
CaT
So, das sollte immer den watched-Wert von dem zweiten Eintrag ausgeben. Wenn du es so willst, das immer der watched-Wert vom letzten Eintrag ausgegeben wird (war aus deinem Posting nicht ersichtlich), dann musst du den head-Teil weglassen.
Edit:
Hmm ich glaub ich hab nicht richtig gelesen, sorry :(
Aber ich lass das einfach mal hier drin, vielleicht bringts ja noch jemandem was.
Code: Alles auswählen
echo `cat deinelogdatei.log | grep ^watched: | head -n 2 | tail -n 1| cut -f 2 -d " "`
Hmm ich glaub ich hab nicht richtig gelesen, sorry :(
Aber ich lass das einfach mal hier drin, vielleicht bringts ja noch jemandem was.
Zuletzt geändert von fluid am 26.03.2004 12:24:54, insgesamt 1-mal geändert.
Code: Alles auswählen
sed -ne '/^name: test2$/,/^$/p' datei
Edit: wenn du wirklich nur den watched-Teil sehen willst, mach folgendes:
Code: Alles auswählen
sed -ne'/^name: test2$/,/^$/ {/^watched:/p}' datei
danke für die tipps. die lösung mit sed tönt gut. aber ich hab mich ein wenig falsch ausgedrückt das is kein file sondern ein output ... ich müsste das also mit ner pipe anhängen. geth das so ? oder muss ich das anders machen ?
wenn ich deine zeile einfach nach ne pipe hänge kommt das:
sed: command garbled: /^name: test2$/,/^$/ {/^watched:/p}
sed: command garbled: /^name: test2$/,/^$/ {/^watched:/p}
grüsse
wenn ich deine zeile einfach nach ne pipe hänge kommt das:
sed: command garbled: /^name: test2$/,/^$/ {/^watched:/p}
sed: command garbled: /^name: test2$/,/^$/ {/^watched:/p}
grüsse
Zuletzt geändert von CaT am 26.03.2004 13:05:47, insgesamt 1-mal geändert.
Code: Alles auswählen
programm | sed -ne '...'
Seltsam. funktioniert bei mir. Was sagt denn "sed --version"
Geht es denn, wenn du meinen ersten Vorschlag als Befehl nimmst (also nur "p" statt "{/....../p}")?
Code: Alles auswählen
cat b | sed -ne '/^name: test2$/,/^$/ {/^watched:/p}'
Geht es denn, wenn du meinen ersten Vorschlag als Befehl nimmst (also nur "p" statt "{/....../p}")?
nö mit dem ersten befehl geht es auch nicth ....
sed --version geht net.
ich hab das prob auf nem system das unter solaris (2.5.6) läuft also wird es sicherlich eine ältere version sein.
sed --version geht net.
ich hab das prob auf nem system das unter solaris (2.5.6) läuft also wird es sicherlich eine ältere version sein.
Zuletzt geändert von CaT am 26.03.2004 13:38:33, insgesamt 1-mal geändert.
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Das wird entweder eine ältere Version von sed sein, oder (noch schlimmer) nicht die GNU Version von sed, sondern eine Sun eigene Lösung. Die hat weniger Features und ist nicht POSIX vollständig soweit ich weiss...
Patrick
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
GNU sed von http://www.gnu.org runterladen und in /usr/local/ installieren... Evtl. darauf achten, dass es nicht als "sed" sondern als "gsed" installiert wird, weil sich einige Solaris Skripte auf das Verhalten Ihres eigenen sed verlassen...
Patrick
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
Perl geht auch:oder um nur die watched-Zeile zu haben. Wenn du bei mehreren Ausgaben die Leerzeile dazwischen behalten willst, musst du den '$p=0 if...'-Befehl einfach ganz ans Ende packen
Code: Alles auswählen
perl -ne '$p=1 if /^name: test2$/;$p=0 if /^$/;print if $p;'
Code: Alles auswählen
perl -ne '$p=1 if /^name: test2$/;$p=0 if /^$/;print if $p and /^watched/;'