Як би ви виконали текст із тексту, що з’являється у двох рядках?
Наприклад:
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
: дивіться відповідь Стефана