我正在编写一个脚本,用于自动计算平均运行时间。
首先,我需要运行$ time ./foo.py
100次并将输出保存到文件time.txt
(工作)
$ for i in `seq 100`; do { time ./foo.py; } 2>> time.txt; done
输出如下所示
time ./foo.py
real 0m0,030s
user 0m0,030s
sys 0m0,000s
[...]
来自不同脚本的运行时位于同一文件中。每个条目都以time ./foo.py
开头,然后是real
,user
和sys
的100个“三元组”。
现在,如果可能的话,我希望脚本可以通过使用全部100个“三胞胎”自动计算每个测试文件的平均运行时间,并且仅返回一个“均值三胞胎”。
我曾考虑过可能使用awk
这样来计算平均值
awk '{ total += $2 } END { print total/NR }' time.txt
但是该命令需要进行调整以满足我的需要-毕竟,只有,
之后的部分(例如,030s
)才可以用于计算,而s
也需要忽略。
由于我不知道如何实现这一目标,所以我想问问社区。 p>
非常感谢您的帮助。
答案 0 :(得分:1)
如果告诉time
以POSIX格式输出时间信息会更容易:
awk '/^real/ { totalReal += $2 } /^user/ { totalUser += $2 } /^sys/ { totalSys += $2 } END { print "realAvg " totalReal/(NR/4) "\n" "userAvg " totalUser/(NR/4) "\n" "sysAvg " totalSys/(NR/4) }' time.txt
打印输出如下:
realAvg 12.62
userAvg 27
sysAvg 3.8
说明:
awk
浏览文件中的每一行,如果该行以real
开头,则将其添加到totalReal
变量中,与user
相同和sys
。因此,基本上,要对这三种“类型”中的每一种保持连续运行。NR
只计算行数。