Ответ 1
Вот один из способов:
$ awk '{s+=$1}END{print "ave:",s/NR}' RS=" " file
ave: 54.646
Файл data.txt
содержит следующее:
1.00 1.23 54.4 213.2 3.4
Вывод скриптов должен быть:
ave: 54.646
Предпочтительными являются некоторые простые сценарии.
Вот один из способов:
$ awk '{s+=$1}END{print "ave:",s/NR}' RS=" " file
ave: 54.646
Используя jq
:
$ seq 10|jq -s 'add/length'
5.5
-s
(--slurp
) считывает входные строки в массив.
Или в случае OP:
tr \ \\n<file|jq -s 'add/length'|sed 's/^/ave: /'
perl -lane '$a+=$_ for(@F);print "ave: ".$a/scalar(@F)' file
если у вас несколько строк, и вам нужно всего лишь одно среднее:
perl -lane '$a+=$_ for(@F);$f+=scalar(@F);END{print "ave: ".$a/$f}' file