Как бы вы выполнить 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
Я хочу определить количество процедур, которые соответствуют узлам, которые находятся в состоянии «свободен». До сих пор я был в состоянии определить «количество процедур» и «узлов в свободном состоянии», но я хочу объединить их в одну команду, которая показывает все свободные процессы.
В приведенном выше примере правильный ответ будет 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
: смотрите ответ Стефанаsed
также сопоставление с образцом. Вы также можете использоватьperl
, илиphp
, или любой язык, который вы предпочитаете. Но, по крайней мере, заголовок вопроса,awk
любом случае ... :)... и вот решение Perl:
источник
Вы можете использовать
awk
getline
команду:От
man awk
:источник