У мене є рядки, розміщені в "греппі", "awks" і "seds", які створюють список номерів, по одному у кожному рядку. Щось на зразок цього:
1.13
3.59
1.23
Як я можу передати це на щось, що виведе середнє значення, макс та хв?
У мене є рядки, розміщені в "греппі", "awks" і "seds", які створюють список номерів, по одному у кожному рядку. Щось на зразок цього:
1.13
3.59
1.23
Як я можу передати це на щось, що виведе середнє значення, макс та хв?
Відповіді:
Оскільки ви вже використовуєте 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}'
awk
зразок у /usr/local/bin/stats
такий чи інший, а потім використовувати його як blabla | stats
.
Я вважаю цю програму корисною для створення статистики у списках номерів у командному рядку: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
Існує також проста-r, яка може робити майже все, що може R, але з меншими натисканнями клавіш:
https://code.google.com/p/simple-r/
Для обчислення середнього, макс і хв, потрібно було б набрати один із:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
З кінчиком шапки до @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