【问题标题】:set bash variable from two nested programs从两个嵌套程序中设置 bash 变量
【发布时间】:2015-11-03 00:26:30
【问题描述】:

我需要多次运行应用程序并使用一些命令获取一些统计信息。 我要做的一个简单的例子是:

/usr/bin/time --format="%U" date

这一行将打印:

Seg Nov  2 22:15:28 BRST 2015
0.00

我需要格式化这个输出,我想用 bash 来做这个,像这样:

echo "$usertime & $date"

其中$usertime/usr/bin/time --format="%U" 的结果,$datedate 的结果

我知道以下方法可行,但我不知道如何将值分成两个变量:

OUTPUT=`/usr/bin/time --format="%U" date`
echo "$OUTPUT"

上面的输出是:

0.00
Seg Nov  2 22:23:50 BRST 2015

(倒序)

【问题讨论】:

    标签: linux bash shell command-line


    【解决方案1】:

    使用 awk

    这里,awk 用于反转行序并格式化输出:

    $ /usr/bin/time --format="%U" date 2>&1 | awk 'NR==1{d=$0;next} {print $0 " & " d}'
    0.00 & Mon Nov  2 16:58:40 PST 2015
    

    使用 sed

    $ /usr/bin/time --format="%U" date 2>&1 | sed -E 'N; s/([^\n]*)\n(.*)/\2 \& \1/'
    0.00 & Mon Nov  2 17:01:15 PST 2015
    

    使用外壳

    $ /usr/bin/time --format="%U" date 2>&1 | ( read d; read t; echo "$t & $d" )
    0.00 & Mon Nov  2 17:04:40 PST 2015
    

    【讨论】:

      【解决方案2】:

      /usr/bin/time 将时间写入标准错误,而 date 的输出将写入标准输出。如果您希望它们在单独的变量中,您可以将时间的输出写入带有-o 标志的文件,然后将其读回另一个变量:

      OUTPUT=`/usr/bin/time -o timefile --format="%U" date`
      TIME=$(<timefile)
      

      【讨论】:

        猜你喜欢
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 2014-06-17
        • 2014-08-09
        • 1970-01-01
        • 2021-12-09
        • 2014-08-24
        相关资源
        最近更新 更多