Какой самый быстрый способ получить среднее значение набора чисел из командной строки?

StackOverflow https://stackoverflow.com/questions/214363

Вопрос

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

Это было полезно?

Решение

Awk ( Авк )

awk '{total += $1; count++ } END {print total/count}'

Другие советы

awk ' { n += $1 }; END { print n / NR }'

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

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

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

average 1 2 3 4 5 6 7 8 9
perl -e 'while (<>) { $sum += <*>; $count++ } print $sum / $count, "\n"';

В Powershell это будет

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

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

gc .\meanNumbers.txt | measure-object -a

Использование " 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

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

Perl.

@a = <STDIN>;

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

print $a[i]/#@a;

Будьте Внимательны:Мой синтаксис может быть немного странноватым.

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

cat numbers.txt | ruby -ne 'BEGIN{$sum=0}; $sum=$sum+

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

<*>

источник

.to_f; END{puts $sum/$.}'

источник

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top