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?
sumber
awk
apakah pencocokan pola; Anda tidak perlugrep
: lihat jawaban Stephanesed
apakah pencocokan pola juga. Anda juga dapat menggunakanperl
, atauphp
, bahasa apa pun yang Anda inginkan. Tapi setidaknya judul pertanyaan yang diajukan untuk multi-line grep ... ;-)awk
anyways ... :)... dan berikut adalah solusi Perl:
sumber
Anda dapat menggunakan
awk
getline
perintah:Dari
man awk
:sumber