आप दो पंक्तियों पर दिखाई देने वाले पाठ के लिए एक grep कैसे करेंगे?
उदाहरण के लिए:
pbsnodes
एक कमांड है जो मैं उपयोग करता हूं जो एक लिनक्स क्लस्टर का उपयोग करता है
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' पढ़ने वाली प्रत्येक पंक्ति को कैसे खोज सकता हूं, लेकिन केवल यदि इसके ऊपर की रेखा 'राज्य = मुक्त' पढ़ती है?
awk
पैटर्न मिलान करता है; आपको इसकी आवश्यकता नहीं हैgrep
: स्टीफन के उत्तर को