45

该文件data.txt包含以下内容:

1.00 1.23 54.4 213.2 3.4

脚本的输出应该是:

ave: 54.646

一些简单的脚本是首选。

4

3 回答 3

75

这是一种方法:

$ awk '{s+=$1}END{print "ave:",s/NR}' RS=" " file
ave: 54.646
于 2013-03-28T12:14:31.460 回答
36

另一种选择是使用jq

$ seq 100|jq -s add/length
50.5

-s( --slurp) 在将每一行解析为 JSON 或在本例中为数字后,为输入行创建一个数组。

或者在 OP 的情况下:

tr \  \\n<file|jq -s add/length|sed s/^/ave:\ /
于 2015-12-16T18:14:22.283 回答
6
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
于 2013-03-28T13:18:36.830 回答