¿Cómo realizarías un grep para el texto que aparece en dos líneas?
Por ejemplo:
pbsnodes
es un comando que uso que devuelve la utilización de un clúster de Linux
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
Quiero determinar el número de procesos que coinciden con los nodos que están en estado 'libre'. Hasta ahora he podido determinar el "número de procesos" y "los nodos en estado libre", pero quiero combinarlos en un comando que muestre todos los procesos libres.
En el ejemplo anterior, la respuesta correcta sería 6 (2 + 4).
Lo que tengo
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
¿Cómo puedo buscar cada línea que lea 'procs = x', pero solo si la línea que está arriba dice 'estado = libre?
fuente
awk
hace coincidencia de patrones; no necesitasgrep
: ver la respuesta de Stephanesed
coincide el patrón. También puede usarperl
, ophp
, o el idioma que prefiera. Pero al menos el titular de la pregunta solicitó grep multilínea ... ;-)awk
todos modos ... :)... y aquí hay una solución Perl:
fuente
Puedes usar el
awk
getline
comando:De
man awk
:fuente