Sử dụng bash, làm thế nào tôi có thể tìm ra trung bình, tối đa và tối thiểu từ một danh sách các số?


18

Tôi có một loạt các greps đường ống, awks và seds tạo ra một danh sách các số, một trên mỗi dòng. Một cái gì đó như thế này:

1.13
3.59 
1.23

Làm thế nào tôi có thể chuyển cái này sang thứ gì đó sẽ tạo ra mức trung bình, tối đa và tối thiểu?


Nếu bạn kết hợp grep, awk và sed với nhau, điều tương tự thường có thể được thực hiện trong một lần gọi awk.
Tạm dừng cho đến khi có thông báo mới.

Câu trả lời:


27

Vì bạn đã sử dụng awk

blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'

Đẹp, nó làm việc cho tôi!
JavaRocky

Tôi nghĩ rằng đã có một nhị phân chấp nhận một danh sách các số và số đếm, avg, min, max cho bạn, giống như sử dụng 'thời gian'.
JavaRocky

1
Tôi chỉ cần đặt awkmô hình ở trên /usr/local/bin/statshoặc như vậy, và sau đó sử dụng nó như là blabla | stats.
Acumenus


0

Ngoài ra còn có r đơn giản, có thể làm hầu hết mọi thứ mà R có thể, nhưng với ít lần nhấn phím hơn:

https://code.google.com.vn/p/simple-r/

Để tính trung bình, tối đa và tối thiểu, người ta sẽ phải nhập một trong số:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -

0

Với một chiếc mũ cho @DerfK:

perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'

$F[0] là giá trị trong trường (0'th) đầu tiên của mỗi dòng

Nếu dữ liệu đầu vào của bạn được phân tách bằng dấu phẩy, hãy thêm công cụ -F,sửa đổi trước-lane

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.