Come eseguiresti un grep per il testo che appare su due righe?
Per esempio:
pbsnodes
è un comando che uso che restituisce l'utilizzo di un cluster Linux
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
Voglio determinare il numero di proc che corrispondono ai nodi che si trovano nello stato "libero". Finora sono stato in grado di determinare il "numero di proc" e "i nodi in stato libero", ma voglio combinarli in un unico comando che mostra tutti i proc gratuiti.
Nell'esempio sopra, la risposta corretta sarebbe 6 (2 + 4).
Ciò che ho
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
Come posso cercare ogni riga che legge 'procs = x', ma solo se la riga sopra legge 'state = free?
awk
fa la corrispondenza del modello; non hai bisognogrep
: vedi la risposta di Stephane