Какой самый быстрый способ получить среднее значение набора чисел из командной строки? - PullRequest
12 голосов
/ 18 октября 2008

Используя любые инструменты, которые вы ожидаете найти в системе nix (на самом деле, если вы хотите, msdos тоже подойдет), какой самый простой / быстрый способ вычислить среднее для набора чисел, предполагая, что вы их по одному в строке в потоке или файле?

Ответы [ 8 ]

16 голосов
/ 18 октября 2008
awk ' { n += $1 }; END { print n / NR }'

Это накапливает сумму в n, затем делится на количество элементов (NR = Количество записей).

Работает на целые или действительные числа.

11 голосов
/ 18 октября 2008

Awk

awk '{total += $1; count++ } END {print total/count}'
5 голосов
/ 18 октября 2008

Использование Num-Utils для UNIX:

average 1 2 3 4 5 6 7 8 9
3 голосов
/ 18 октября 2008
perl -e 'while (<>) { $sum += $_; $count++ } print $sum / $count, "\n"';
1 голос
/ 04 сентября 2013

Использование "st" (https://github.com/nferraz/st):

$ st numbers.txt
N      min   max    sum    mean  sd
10.00  1.00  10.00  55.00  5.50  3.03

Укажите опцию, чтобы увидеть отдельные характеристики:

$ st numbers.txt --mean
5.5

(ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я написал этот инструмент:))

1 голос
/ 18 октября 2008

В Powershell это будет

get-content .\meanNumbers.txt | measure-object -average

Конечно, это подробный синтаксис. Если вы набрали его с использованием псевдонимов,

gc .\meanNumbers.txt | measure-object -a
0 голосов
/ 08 февраля 2018

Рубиновый лайнер

cat numbers.txt | ruby -ne 'BEGIN{$sum=0}; $sum=$sum+$_.to_f; END{puts $sum/$.}'

источник

0 голосов
/ 18 октября 2008

Perl.

@a = <STDIN>;

for($i = 0; $i < #@a; $i++)
{
   $sum += $a[i];
}

print $a[i]/#@a;

Предостережение Emptor: Мой синтаксис может быть немного странным.

...