Como você executaria um grep para o texto que aparece em duas linhas?
Por exemplo:
pbsnodes
é um comando que eu uso que retorna a utilização de um 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
Eu quero determinar o número de procs que correspondem aos nós que estão no estado 'free'. Até agora, consegui determinar o "número de procs" e "os nós no estado livre", mas quero combiná-los em um comando que mostre todos os procs gratuitos.
No exemplo acima, a resposta correta seria 6 (2 + 4).
O que eu tenho
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
Como posso pesquisar todas as linhas que lêem 'procs = x', mas apenas se a linha acima dela exibir 'state = free?
awk
faz correspondência de padrões; Você não precisagrep
: veja a resposta de Stephane