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?
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?
Câu trả lời:
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}'
awk
mô hình ở trên /usr/local/bin/stats
hoặc như vậy, và sau đó sử dụng nó như là blabla | stats
.
Tôi thấy chương trình này hữu ích để tạo số liệu thống kê về danh sách các số tại dòng lệnh: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
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 -
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