Назад | Перейти на главную страницу

Отформатируйте вывод из / usr / bin / time, чтобы игнорировать части секунд

Я хочу измерить истекшее время выполнения команды и показать его без доли секунды независимо от того, сколько времени это займет.

Например,

/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