# Format output from /usr/bin/time to ignore parts of seconds

I want to measure the elapsed time of a command, and show it without fractions of seconds no matter how little time it takes.

For instance,

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


might return 4:36:05 for a long running process, or 7:27.32 for a short one.

In the second instance, how can I format it as 7:27 or 00:07:27 (leading zeros not important), so that it is obvious at a glance that it's 7 minutes (and not 7 hours as I initially thought)?

The seconds fractions are just not necessary for my measurements.

-

## 2 Answers

If you're using Bash, you could use the built-in time command. It outputs "m" for minutes and "s" for seconds instead of ambiguous colons. You can control the format of its output with the TIMEFORMAT variable:

$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  The default value of TIMEFORMAT: TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'


Edit:

You can also use sed to modify the output of /usr/bin/time to remove the ambiguity in a similar way:

$/usr/bin/time -f "%E" sleep 1.99 2>&1 | sed 's/:$$[^:]\+$$$/m\1/;s/:/h/;s/\..*//;s/$/s/'  Demo using simulated time output: $ echo -e '0:01.99\n10:11:12' | sed 's/:$$[^:]\+$$$/m\1/;s/:/h/;s/\..*//;s/$/s/'
0m01s
10h11m12s

-
I only needed the last line to be formatted, so I added "$" to the beginning of each sed directive. The command changes to sed '$s/:([^:]\+)$/m\1/;$s/:/h/;s/\..*//;$s/$/s/' –  tephyr Jan 28 '11 at 21:58

Try piping it through this cut command. I'm not in front of an Linux shell to try it for sure so your mileage may vary. For example, I'm not sure if the first field is zero or one.

cut -d . -f 1

-