Bagaimana Anda melakukan grep untuk teks yang muncul di dua baris?
Sebagai contoh:
pbsnodes
adalah perintah yang saya gunakan yang mengembalikan pemanfaatan cluster linux
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
Saya ingin menentukan jumlah procs yang cocok dengan node yang dalam status 'gratis'. Sejauh ini saya telah dapat menentukan "jumlah procs" dan "node dalam keadaan bebas", tetapi saya ingin menggabungkannya menjadi satu perintah yang menunjukkan semua procs gratis.
Dalam contoh di atas, jawaban yang benar adalah 6 (2 + 4).
Apa yang saya punya
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
Bagaimana saya bisa mencari setiap baris yang bertuliskan 'procs = x', tetapi hanya jika baris di atasnya berbunyi 'state = free?
awk
apakah pencocokan pola; Anda tidak perlugrep
: lihat jawaban Stephane