您将如何对出现在两行上的文本执行grep?
例如:
pbsnodes
是我使用的命令,该命令返回Linux集群的利用率
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
我想确定与处于“ free”状态的节点匹配的proc的数量。到目前为止,我已经能够确定“进程数”和“处于空闲状态的节点”,但是我想将它们组合成一个显示所有空闲进程的命令。
在上面的示例中,正确答案将是6(2 + 4)。
我有的
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
如何搜索每行读为“ procs = x”的行,但前提是该行上方的行读为“ state = free”?
awk
模式匹配;您不需要grep
:请参见Stephane的答案