A implementação GNU de grep
vem com dois argumentos para também imprimir as linhas antes ( -B
) e depois ( -A
) de uma correspondência. Snippet da página man:
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.
Assim, no seu caso, você teria que grep para state = free
e também imprimir a seguinte linha. Combinando isso com os snippets da sua pergunta, você chegará a algo assim:
usr@srv % pbsnodes | grep -A 1 'state = free' | grep "procs = " | awk '{ print $3 }' | awk '{ sum+=$1 } END { print sum }'
6
e um pouco mais curto:
usr@srv % pbsnodes | grep -A 1 'state = free' | awk '{ sum+=$3 } END { print sum }'
6