Используя bash, как я могу узнать среднее, максимальное и минимальное значения из списка чисел?

18

У меня есть серия grep, awks и seds, которые выводят список чисел, по одному в каждой строке. Что-то вроде этого:

1.13
3.59 
1.23

Как я могу передать это к чему-то, что будет выводить среднее, максимальное и минимальное значения?

JavaRocky
источник
Если вы объединяете grep, awk и sed, то часто это можно сделать одним вызовом awk.
Приостановлено до дальнейшего уведомления.

Ответы:

27

Так как вы уже используете 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}'
DerfK
источник
Хорошо, это работает для меня!
JavaRocky
Я думал, что был бы уже двоичный файл, который принимает список чисел и счет, avg, min, max для вас, вроде как использовать «время».
JavaRocky
1
Я просто поместил бы вышеупомянутый awkобразец в /usr/local/bin/statsили такой, и затем использовал бы это как blabla | stats.
Acumenus
0

Существует также simple-r, который может делать почти все, что может R, но с меньшим количеством нажатий клавиш:

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

Чтобы вычислить среднее, максимальное и минимальное значения, необходимо ввести одно из следующих значений:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
user192124
источник
0

С кончиком шляпы @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] значение в первом (0-ом) поле каждой строки

Если ваши входные данные разделены запятыми, добавьте -F,модификатор перед-lane

Крис Кокнат
источник