用于计算数据文件中数字列表平均值的脚本

Jac*_*kWM 34 bash awk sed

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

1.00 1.23 54.4 213.2 3.4
Run Code Online (Sandbox Code Playgroud)

脚本的输出应该是:

ave: 54.646
Run Code Online (Sandbox Code Playgroud)

一些简单的脚本是首选.

Chr*_*our 65

这是一种方法:

$ awk '{s+=$1}END{print "ave:",s/NR}' RS=" " file
ave: 54.646
Run Code Online (Sandbox Code Playgroud)

  • 这将在空文件上产生零错误除法.你需要像'awk'{s + = $ 1} END {print"ave:",(NR?s/NR:"NaN")}'RS =""file (4认同)

nis*_*ama 23

另一种选择是使用jq:

$ seq 100|jq -s add/length
50.5
Run Code Online (Sandbox Code Playgroud)

-s(--slurp)在将每一行解析为JSON之后为输入行创建一个数组,或者在这种情况下为数字.

或者在OP的情况下:

tr \  \\n<file|jq -s add/length|sed s/^/ave:\ /
Run Code Online (Sandbox Code Playgroud)

  • 可能是我见过的最有创意的使用“jq”的方法之一! (6认同)

Vij*_*jay 5

perl -lane '$a+=$_ for(@F);print "ave: ".$a/scalar(@F)' file
Run Code Online (Sandbox Code Playgroud)

如果你有多行,你只需要一个平均值:

perl -lane '$a+=$_ for(@F);$f+=scalar(@F);END{print "ave: ".$a/$f}' file
Run Code Online (Sandbox Code Playgroud)