我想测量命令的运行时间并显示它没有不论花费的时间多么短,都是几分之一秒。
例如,
/usr/bin/time -f "%E (real)" SOMECOMMAND
可能会返回4:36:05
一个长时间运行的进程,或者7:27.32
一个短暂运行的进程。
在第二种情况下,我该如何将其格式化为7:27
或00:07:27
(前导零不重要),以便一眼就能看出它是 7 分钟(而不是我最初认为的 7 小时)?
对于我的测量来说,秒的分数是没有必要的。
答案1
如果您使用的是 Bash,则可以使用内置time
命令。它输出“m”表示分钟,“s”表示秒,而不是模糊的冒号。您可以使用变量控制其输出的格式TIMEFORMAT
:
$ time sleep 1.99
real 0m1.999s
user 0m0.004s
sys 0m0.004s
$ TIMEFORMAT=%0lR # truncate (not round) the decimal seconds
$ time sleep 1.99
0m1s
的默认值TIMEFORMAT
:
TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'
编辑:
您还可以使用sed
来修改的输出,/usr/bin/time
以类似的方式消除歧义:
$ /usr/bin/time -f "%E" sleep 1.99 2>&1 | sed 's/:\([^:]\+\)$/m\1/;s/:/h/;s/\..*//;s/$/s/'
使用模拟time
输出的演示:
$ echo -e '0:01.99\n10:11:12' | sed 's/:\([^:]\+\)$/m\1/;s/:/h/;s/\..*//;s/$/s/'
0m01s
10h11m12s
答案2
尝试通过此 cut 命令进行管道传输。我没有在 Linux shell 前尝试过,所以您的里程可能会有所不同。例如,我不确定第一个字段是零还是一。
剪切-d.-f 1