Wie würden Sie ein Grep für Text ausführen, der in zwei Zeilen angezeigt wird?
Beispielsweise:
pbsnodes
ist ein Befehl, den ich verwende und der die Auslastung eines Linux-Clusters zurückgibt
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
Ich möchte die Anzahl der Prozesse ermitteln, die mit Knoten im Status "frei" übereinstimmen. Bisher konnte ich die "Anzahl der Procs" und "die Knoten im freien Zustand" bestimmen, aber ich möchte sie in einem Befehl kombinieren, der alle freien Procs anzeigt.
Im obigen Beispiel wäre die richtige Antwort 6 (2 + 4).
Was ich habe
root$ NUMBEROFNODES=`pbsnodes|grep 'state = free'|wc -l`
root$ echo $NUMBEROFNODES
2
root$ NUMBEROFPROCS=`pbsnodes |grep "procs = "|awk '{ print $3 }' | awk '{ sum+=$1 } END { print sum }'`
root$ echo $NUMBEROFPROCS
14
Wie kann ich nach jeder Zeile suchen, die 'procs = x' lautet, aber nur, wenn die Zeile darüber 'state = free' lautet?
quelle
awk
führt Pattern Matching durch; Sie brauchen nichtgrep
: Siehe Stephanes Antwortsed
auch Pattern Matching. Sie könnten auchperl
oder verwendenphp
oder welche Sprache Sie auch immer bevorzugen. Aber zumindest die Überschrift der Frage fragte nach mehrzeiligemawk
trotzdem benutzt ... :)... und hier ist eine Perl-Lösung:
quelle
Sie können den
awk
getline
Befehl verwenden:Von
man awk
:quelle