格式化 /usr/bin/time 的输出以忽略秒的部分

格式化 /usr/bin/time 的输出以忽略秒的部分

我想测量命令的运行时间并显示它没有不论花费的时间多么短,都是几分之一秒。

例如,

/usr/bin/time -f "%E (real)" SOMECOMMAND

可能会返回4:36:05一个长时间运行的进程,或者7:27.32一个短暂运行的进程。

在第二种情况下,我该如何将其格式化为7:2700: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

相关内容