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

linuxtime

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.

Best Answer

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