2011-12-08 41 views
7

Tôi đang tính toán mức trung bình cho một loạt các con số trong một loạt các tập tin văn bản như thế này:awk tính toán trung bình hoặc không

grep '^num' file.$i | awk '{ sum += $2 } END { print sum/NR }' 

Nhưng một số lần so với tập tin không chứa mô hình, trong đó cas tôi muốn tập lệnh trả về 0. Bất kỳ ý tưởng nào của lớp lót này được sửa đổi một chút?

Trả lời

14

Bạn đang thêm vào tải của bạn (trung bình) bằng cách sinh ra một quy trình bổ sung để làm mọi thứ mà người đầu tiên có thể làm. Sử dụng 'grep' và 'awk' cùng nhau là một lá cờ đỏ. Bạn sẽ viết tốt hơn:

awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file 
5

Hãy thử điều này: nhà điều hành ternary

... END { print NR ? sum/NR : 0 } 
1

Sử dụng awk của, ví dụ: m ? m : n có nghĩa là, nếu m có giá trị, sử dụng nó, nếu không '?' ':' Sử dụng giá trị khác này. Cả n và m đều có thể là chuỗi, số hoặc biểu thức tạo ra giá trị.

grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum/NR : 0.0 }' 
+0

Các câu trả lời khác đã chỉ ra 'grep' vô ích, nhưng có thể bạn vẫn muốn khắc phục điều đó. – tripleee

Các vấn đề liên quan