我正在尝试收集每天运行的脚本的一些统计数据。我想了解实际用于睡眠的时间。有没有办法获得所有睡眠周期的总和。例如:
#some task
sleep 5
#some task
sleep 2
我希望结果为 7。该脚本包含许多具有多个循环和条件的文件。该解决方案需要运行脚本来查看 sleep 实际被调用的内容以及调用次数。
答案1
一个快速而肮脏的答案是只 grep 并使用 awk 将它们相加:
grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'
这表示用于grep
搜索“input.sh”。在每一行上仅打印 ( -o
) 该行的匹配部分。匹配应该是sleep
字符串后跟 1 个或多个 0 到 9 之间的数字。所以现在我们有一些只会打印出来的内容:
sleep 5
sleep 2
我们将该列表发送到awk
其中,逐行进行处理并将所有第二列相加。最后打印出总数。
注意:这是一个相当脆弱的解决方案。例如,如果你有一行注释掉:
# we used to do sleep 1000 here by it was too slow
您仍会将其包含在总数中。如果您对脚本有更多了解,就可以创建更强大的管道。例如,如果您知道sleep
调用始终位于行的开头,则可以锚定 grep:
grep -o '^sleep [0-9]\+' | ...
另外,一个包含很多睡眠的脚本也很可疑。几乎总是有更好的方法来组织自动化,而睡眠大多只对测试有用。