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?
awk
führt Pattern Matching durch; Sie brauchen nichtgrep
: Siehe Stephanes Antwort