Вывод времени фильтра (1) для получения только значений времени - PullRequest
2 голосов
/ 29 ноября 2010

как мне отфильтровать определенные выходные значения команды времени под OS X? Я пытался

➜  ~  (time ls -la)| grep system|awk "{print $4, $6, $8, $10}"
ls -G -la  0.01s user 0.01s system 16% cpu 0.102 total

однако я хочу взять только цифры, в данном случае «0,01 0,01 16 0,102» Спасибо

Редактировать: Пол указал, что вывод может перейти на stderr , поэтому я решил "перенаправить" вывод на stdout и продолжить взлом строк:)

(time ls -la) 2>&1 | grep system | tr -dc '[:digit:]. '

Ответы [ 3 ]

4 голосов
/ 29 ноября 2010

При использовании встроенной функции zsh time установите переменную TIMEFMT для управления выводом (см. man zshparam).

Чтобы воспроизвести вывод по умолчанию без буквенных строк:

TIMEFMT='%*E %*U %*S %P'

Звездочки препятствуют выводу, например, s в течение «секунд».

Конечно, вы можете ограничить его одним конкретным полем, если это все, что вас действительно интересует.

Перенаправить вывод времени для захвата его в переменную или дальнейшей обработки:

duration=$({ time ls -la >/dev/null; } 2>&1)

Я перенаправил вывод команды на /dev/null, но если вы хотите захватить его, простоудалите это перенаправление.

2 голосов
/ 29 ноября 2010

Общий ответ здесь заключается в том, что для обработки вывода time в общем случае вы должны иметь такую ​​конструкцию, как

(time command 1>/dev/null) 2>&1 | ... 

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

Как отметил Деннис Уильямсон, TIMEFMT zsh можно использовать для настройки вывода.Это хорошо, потому что это означает, что вам, вероятно, не нужно создавать конвейер для переформатирования вывода времени при использовании zsh, но вам все равно придется выполнить перенаправление stderr для захвата вывода.

1 голос
/ 29 ноября 2010

Немного взлома, но вы можете просто удалить нечисловые символы?

tr -dc '[:digit:]. '

РЕДАКТИРОВАТЬ: Кроме того, вывод может идти в stderr, поэтому перенаправьте его в stdin с 2> & 1

...