Usando bash, como posso descobrir a média, max e min de uma lista de números?

16

Eu tenho uma série de greps, awks e seds que produzem uma lista de números, um em cada linha. Algo parecido com isto:

1.13
3.59 
1.23

Como posso canalizar isso para algo que produzirá a média, o máximo e o mínimo?

    
por JavaRocky 24.02.2011 / 00:17

4 respostas

24

Como você já está usando o 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}'
    
por 24.02.2011 / 00:30
3

Eu acho este programa útil para gerar estatísticas em listas de números na linha de comando: link

    
por 27.01.2012 / 20:40
0

Há também o simple-r, que pode fazer quase tudo que o R pode, mas com menos pressionamentos de tecla:

link

Para calcular a média, o máximo e o mínimo, seria necessário digitar um deles:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
    
por 30.09.2013 / 22:48
0

Com uma gorjeta do chapéu para @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] é o valor no primeiro (0'th) campo de cada linha

Se os dados de entrada forem separados por vírgulas, adicione o modificador -F, antes de -lane

    
por 03.12.2015 / 01:55