【问题标题】:Grep time command outputgrep 时间命令输出
【发布时间】:2016-07-15 02:26:25
【问题描述】:

使用time ls,我有以下输出:

$ time ls -l 
total 2
-rwx------+ 1 FRIENDS None 97 Jun 23 08:59 location.txt
-rw-r--r--+ 1 FRIENDS None 10 Jun 23 09:06 welcome
real    0m0.040s
user    0m0.000s    
sys     0m0.031s

现在,当我尝试 grepreal 值行时,实际结果是:

$ time ls -l | grep real
real    0m0.040s
user    0m0.000s
sys     0m0.031s

我的问题是,如何只获得真正的价值作为输出?在这种情况下,0m0.040s

【问题讨论】:

  • time 正在将其输出发送到 stderr,而不是 stdout,因此 grep 不会处理其输出的任何

标签: linux


【解决方案1】:

time 将其输出写入 stderr,因此您需要通过管道传输 stderr 而不是 stdout。但同样重要的是要记住time 是 bash 语法的一部分,它对整个管道进行计时。因此,您需要将管道包裹在大括号中,或者在子 shell 中运行:

 $ { time ls -l >/dev/null; } 2>&1 | grep real
 real   0m0.005s

使用 Bash v4.0(可能在 Linux 发行版上通用,但在 Mac OS X 上仍然不是标准),您可以使用 |& 来管道 stdoutstderr

{ time ls -l >/dev/null; } |& grep real

或者,您可以使用time 实用程序,它允许控制输出格式。在我的系统上,该实用程序位于 /usr/bin/time:

/usr/bin/time -f%e ls -l >/dev/null 

man time 了解有关time 实用程序的更多详细信息。

【讨论】:

    【解决方案2】:
    (time ls -l)  2>&1 > /dev/null |grep real
    

    这会将 stderr(时间发送输出的地方)重定向到与 stdout 相同的流,然后将 stdout 重定向到 dev/null,因此不会捕获 ls 的输出,然后将现在的时间输出通过管道传输到 stdin的grep。

    【讨论】:

    • 为了完整,您应该在末尾添加| awk '{print $2}',因为OP只需要时间部分。
    • @BurhanKhalid 确实如此 - 但我们应该留下 something 让 OP 去做 :-)
    【解决方案3】:

    如果只想指定time的输出格式builtin,可以修改TIMEFORMAT环境变量的值,而不是用grep过滤。

    在你的情况下,

    TIMEFORMAT=%R
    time ls -l
    

    只会给你“真实”的时间。

    Here's the link Bash 手册中的相关信息(在“TIMEFORMAT”下)。

    This 是关于解析time 的输出的类似问题。

    【讨论】:

    • 这种方式输出效果更好。 serafina@box:~$ TIMEFORMAT=%R && time ls > /dev/null 0.001
    【解决方案4】:

    注意.. bash 有一个内置的“时间”命令。以下是一些不同之处..

    # GNU time command (can also use $TIMEFORMAT variable instead of -f)
    bash> /usr/bin/time -f%e ls >/dev/null
    0.00
    
    
    # BASH built-in time command (can also use $TIME variable instead of -f)
    bash> time -f%e ls >/dev/null
    -f%e: command not found
    
    real    0m0.005s
    user    0m0.004s
    sys     0m0.000s
    

    【讨论】:

      【解决方案5】:

      我想,可以简单一点:

      time ls &> /dev/null | grep real
      

      【讨论】:

        猜你喜欢
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多