2013-03-28 25 views
22

文件data.txt计算数字列表平均包含以下内容:脚本用于在数据文件中

1.00 1.23 54.4 213.2 3.4 

脚本的输出应该是:

ave: 54.646 

一些简单的脚本是首选。

+3

如果您有什么多行? – Vijay

+9

awk'{s + = $ 1} END {print“ave:”,s/NR}'RS =“\ n”file#如果每行有一条记录 –

+0

默认记录分隔符(RS)如果您有多行,则不需要指定RS =“\ n”。 'awk'{s + = $ 1} END {print“ave:”,s/NR}'文件' –

回答

48

这里有一个方法:

$ awk '{s+=$1}END{print "ave:",s/NR}' RS=" " file 
ave: 54.646 
+1

这将在空文件上产生除零错误的除法。你需要像'awk'{s + = $ 1} END {print“ave:”,(NR?s/NR:“NaN”)}'RS =“”file' –

3
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 
9

使用jq

$ seq 10|jq -s 'add/length' 
5.5 

-s--slurp)将输入行读入数组。

或在OP的情况:

tr \ \\n<file|jq -s 'add/length'|sed 's/^/ave: /' 
相关问题