คุณจะทำการ 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
ฉันต้องการกำหนดจำนวนของ procs ที่ตรงกับโหนดที่อยู่ในสถานะ 'ว่าง' จนถึงตอนนี้ฉันสามารถระบุ "จำนวนของ procs" และ "โหนดในสถานะอิสระ" แต่ฉันต้องการรวมพวกมันเป็นคำสั่งเดียวที่แสดง procs ฟรีทั้งหมด
ในตัวอย่างข้างต้นคำตอบที่ถูกต้องคือ 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
: ดูคำตอบของ Stephane