Làm thế nào bạn sẽ thực hiện một grep cho văn bản xuất hiện trên hai dòng?
Ví dụ:
pbsnodes
là một lệnh tôi sử dụng trả về việc sử dụng một cụm linux
root$ pbsnodes
node1
state = free
procs = 2
bar = foobar
node2
state = free
procs = 4
bar = foobar
node3
state = busy
procs = 8
bar = foobar
Tôi muốn xác định số lượng procs khớp với các nút ở trạng thái 'miễn phí'. Cho đến nay tôi đã có thể xác định "số lượng procs" và "các nút ở trạng thái tự do", nhưng tôi muốn kết hợp chúng thành một lệnh hiển thị tất cả các procs miễn phí.
Trong ví dụ trên, câu trả lời đúng sẽ là 6 (2 + 4).
Tôi có gì
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
Làm cách nào tôi có thể tìm kiếm mọi dòng đọc 'procs = x', nhưng chỉ khi dòng trên nó đọc 'state = free?
awk
không khớp mẫu; bạn không cầngrep
: xem câu trả lời của Stephane