有什么方法可以从文件中获取数值并添加它吗?

有什么方法可以从文件中获取数值并添加它吗?

以下是我想要的分步解释

  1. 该脚本运行了 10 次
  2. 输入命令后,su -c hackbench -pTl 4000它会导出一条消息,例如,Running in threaded mode with 10 groups using 40 file descriptors each (== 400 tasks) Each sender will pass 4000 messages of 100 bytes Time: 13.353用不同的时间代替 13.353
  3. 我想将添加13.353到下一个值,su -c hackbench -pTl 4000例如,Running in threaded mode with 10 groups using 40 file descriptors each (== 400 tasks) Each sender will pass 4000 messages of 100 bytes Time: 10.476为了找到 10 次运行的平均值

我知道它可以用 for 循环来循环,我甚至知道可以像下面这样添加时间 TIME=$(($TIME + $("somehow we have to bring '10.476' here")))

我只是不知道如何才能获得 13.353 和 10.476

答案1

使用 awk:

$ su -c hackbench -pTl 4000| awk '{print $NF}'
13.353

awk 将每个输入行拆分为字段. $NF是该行的最后一个字段。

使用 grep:

$ su -c hackbench -pTl 4000| grep -oE '[[:digit:]+-.]+$'
13.353

-o告诉grep仅打印匹配的内容。 [:digit:]+-.]+$匹配行尾的数字。

使用 sed:

$ su -c hackbench -pTl 4000| sed 's/.* //'
13.353

s/.* //删除该行中直到最后一个空格为止的所有内容。仅保留最后一个数字。

使用 bash:

$ readarray -d' ' arr < <(su -c hackbench -pTl 4000); echo "${arr[-1]}"
13.353

这将 hackbench 命令的输出读入数组arr${arr[-1]}打印数组的最后一个元素。(这需要较新版本的 bash。)

添加

Bash 不理解浮点数。因此,必须使用 awk 或 bc 或其他工具。例如:

$ time=10
$ time=$(echo "$time + ${arr[-1]}" | bc -l)
$ echo "$time"
23.353

另外,在工作中,最好使用小写或大小写混合的 shell 变量名。这是因为系统使用大写变量名,而您不想意外覆盖其中一个变量名。

相关内容