Я хочу измерить истекшее время выполнения команды и показать его без доли секунды независимо от того, сколько времени это займет.
Например,
/usr/bin/time -f "%E (real)" SOMECOMMAND
может вернуться 4:36:05
для длительного процесса, или 7:27.32
на короткое.
Во втором случае, как я могу отформатировать его как 7:27
или 00:07:27
(ведущие нули не важны), так что сразу видно, что это 7 минут (а не 7 часов, как я изначально думал)?
Для моих измерений доли секунд просто не нужны.
Попробуйте пропустить его через эту команду вырезания. Я не собираюсь использовать оболочку Linux, чтобы наверняка попробовать ее, поэтому ваш опыт может отличаться. Например, я не уверен, что первое поле равно нулю или единице.
вырезать -d. -f 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