Використовуючи bash, як я можу дізнатись середній, максимум та хв зі списку чисел?


18

У мене є рядки, розміщені в "греппі", "awks" і "seds", які створюють список номерів, по одному у кожному рядку. Щось на зразок цього:

1.13
3.59 
1.23

Як я можу передати це на щось, що виведе середнє значення, макс та хв?


Якщо ви збираєте греп, 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}'

Приємно, це працює для мене!
JavaRocky

Я подумав, що вже було б двійкове, яке приймає список чисел і кількість, avg, min, max для вас, як-от, використовуючи "time".
JavaRocky

1
Я б просто поставити вищезазначений awkзразок у /usr/local/bin/statsтакий чи інший, а потім використовувати його як blabla | stats.
Acumenus


0

Існує також проста-r, яка може робити майже все, що може R, але з меншими натисканнями клавіш:

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

Для обчислення середнього, макс і хв, потрібно було б набрати один із:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.