平均数字数据

时间:2016-03-16 10:41:55

标签: bash loops

我有一个包含标题的日志文件和由数字数据组成的相关字符串数

This is the benchmarks ns/day for wsp systems
21.473
21.483
21.425
21.548
21.588
21.587
21.522
21.547
21.549
21.487

在日志中我需要自动添加由AVERAGE =组成的最后一行,并从2-11个字符串的数字计算平均值。将非常感谢优雅的bash脚本,它将打开日志,循环字符串并在其中添加最后一个字符串!

THX!

詹姆斯

2 个答案:

答案 0 :(得分:0)

这个awk单行应该适合你:

awk '7;NR>1{t+=$0}END{printf "EVERAGE=%.3f\n",t/(NR-1)}' file

它的作用:

  • 读取一行并按原样打印
  • 如果行号> 1,请将值相加,然后保存到var t
  • 打印出文件中的最后一行后,计算平均值,并以与其他数字相同的格式打印。 (printf功能)

如果你在你的示例文件上测试它,它会给出:

kent$  awk '7;NR>1{t+=$0}END{printf "AVERAGE=%.3f\n",t/(NR-1)}' f
this is the benchmarks ns/day for wsp systems
21.473
21.483
21.425
21.548
21.588
21.587
21.522
21.547
21.549
21.487
AVERAGE=21.521

答案 1 :(得分:0)

我会使用awk这个

awk '{sum+=$1; print} END{print "AVERAGE=" sum/(NR-1)}' logfile

sum+=$1会将每个字符串的第一个元素添加到变量

END语句将根据行数(或awk词汇表中的'record')NR

进行平均