繁体   English   中英

使用 bash 取十进制数的平均值

[英]Taking average of decimal number using bash

如何取写入文件中的十进制值的平均值:TestFile as

Time to write: 0.000118000 sec

Time to write: 0.000119000 sec

Time to write: 0.000122000 sec

错误的索尔:

以下仅打印零,即 0

awk '{sum+=$7}END{print sum/NR}' TestFile

此解决方案将针对正确的行进行计算:

awk '/Time to write/ {sum+=$4; count++} END {print "avg:", sum/count}' data.txt

编辑

因为你遇到了麻烦,并且似乎返回零尝试使用这个

grep -oP "\d+\.\d+" testFile | awk -vx=0 '{x += $1} END {print x/NR}'

如果文件是双倍行距的,这将起作用。 它只打印具有十进制数字的文件的匹配项。 并将其发送到 awk。

-P 标志是 perl 正则表达式。 你可以用 -E 做同样的事情,但是\d+匹配一个或多个数字, \. 匹配一个句点。 一个。 在正则表达式中具有特殊含义,需要转义,并且\d+匹配一个或多个数字,因此将它们放在一起, '\d+\.\d+' ,你有一个小数。

最后,如果您继续获得科学记数法,您可以考虑使用 printf 来实现浮点记数法

awk -vx=0 '{x += $4} END { printf ("%8.9f", x/NR) } testFile'

你可以指定一些更小的东西,比如“%4.3f”,在小数点后只打印 4 个数字,相反,使用 %e 以科学记数法打印

更多在 awk 中使用awk


旧资料,见上<hr>

awk -vx=0 '{x += $4} END {print x/NR}' testFile

输出:

0.000119667

对于每一行 append $4,在你的测试文件中是数字,到 x。 最后除以 x 为行数。

如果您的文件真的是双倍行距,请先运行以下命令:

sed -i '/^$/d' testFile删除空行。 您可能要考虑不通过删除 -i 并执行类似sed '/^$/d' testFile > newFile来编辑 testFile

甚至将这两个文件和 pipe 标准输出从sedawk

sed '/^$/d' testFile | awk -vx=0 '{x += $4} END {print x/NR}'

如果返回 0,则您的 testFile 可能有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM