如何在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” 感谢
编辑:Paul指出,输出可能是go to stderr所以我的解决方案是将输出“重定向”到stdout并继续黑客攻击字符串:)
(time ls -la) 2>&1 | grep system | tr -dc '[:digit:]. '
答案 0 :(得分:4)
使用zsh builtin time
时,设置变量TIMEFMT
以控制输出(请参阅man zshparam
)。
要重现没有alpha字符串的默认输出:
TIMEFMT='%*E %*U %*S %P'
例如,星号会阻止s
输出“秒”。
当然,如果你真正感兴趣的话,你可以将它限制在一个特定的领域。
重定向时间输出以将其捕获到变量中或进一步处理:
duration=$({ time ls -la >/dev/null; } 2>&1)
我将命令的输出重定向到/dev/null
,但是如果要捕获它,只需删除该重定向。
答案 1 :(得分:2)
这里的通用答案是,为了处理time
的输出,你必须有一个像
(time command 1>/dev/null) 2>&1 | ...
命令在子shell中并且隐藏其输出,然后捕获时间输出(在stderr上,也就是描述符2)并将其重定向到stdout,然后将stdout指向管道。之后可以进行进一步处理。
正如Dennis Williamson所说,zsh的TIMEFMT可用于自定义输出。这很好,因为这意味着您可能不必构建管道来在使用zsh时重新格式化时间输出,但您仍需要执行stderr重定向来捕获输出。
答案 2 :(得分:1)
有点破解,但你可以删除非数字字符?
tr -dc '[:digit:]. '
编辑:此外,输出可能会转到stderr,因此将其重定向到stdin 2>& 1