поместите вывод 'time ./a.out' в переменную - PullRequest
1 голос
/ 21 июня 2011

Я использовал команду времени для выполнения программы (например, «xxx $ time ./a.out»), с выводом следующим образом,

real 0m7.250s
usr  0m10.395s
sys  0m0.026s

Что я хочу получить, это 0 и 7.250, как в0m7.250s.Я пробовал "awk '{print $ 2}'", но безуспешно;там ничего не выводится.

PS: я попытался поместить вывод команды времени в файл, используя ">", также безуспешно.

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Попробуйте:

pax$ tm=$((time sleep 1) 2>&1 | awk '/^real/{print $2}') ; echo $tm
0m1.002s

(с подстановкой собственной команды a.out, конечно, sleep 1 только что использовался в качестве примера).

Создает подоболочку для time и гарантирует, что его стандартная ошибка вместо этого отправляется на стандартный вывод (time специально выводит свою информацию в стандартную ошибка , так что она хранится отдельно от нормального вывода программы, в которой она синхронизируется).1013 * Команда awk захватывает строку, начинающуюся real, и выводит второй аргумент (время).

4 голосов
/ 21 июня 2011

Команда time отправляет свой вывод на стандартную ошибку, чтобы не мешать нормальному выводу программы. Вы захотите использовать 2>&1, чтобы перенаправить его туда, где он может быть захвачен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...