将程序的输出附加到文件bash脚本

时间:2014-07-27 20:15:22

标签: bash

我必须在bash shell中多次执行程序,如下所示:

$ for i in {1..10}; do time ./a.out; done

每次迭代都会生成以下输出:

Start
Stop

real   0m1.112s
user   0m1.112s  
sys    0m0.00s

我需要从此输出(在每次迭代时生成)附加一个实部,即0m1.112s(从实际0m1.112s中提取)到某个输出文件。最终输出可能如下所示:

1.112s, 1.113s, 1.112s, 1.113s, 1.112s

我为此制作了一个C程序并且它运行良好但问题是它会产生一些开销并且会在执行时产生更多变化。

2 个答案:

答案 0 :(得分:1)

以下是:

for((i=0;i<10;i++)) do 
{ time ./a.out >/dev/null; } 2>&1 
done | awk '{ORS=","; if($1=="real") print $2}'
  • time输出到 stderr ,因此2>&1会将stderr发送到stdout。
  • >/dev/null将丢弃实际输出(如果有),因为您只对time的输出感兴趣。
  • 在awk部分中,如果第一列为"real"并且ORS将输出分隔符设置为,,那么它将打印第二列值,以便所有输出都在单行。

答案 1 :(得分:0)

仅限bash解决方案:

for i in {1..10}; do time ./a.out 2&>1 > /dev/null ; done |
(
  # Collect data
  values=()
  while read key value; do
      [[ "$key" == "real" ]] && values+=( "$value" )
  done;

  # produce output
  IFS=, ; echo "${values[*]}" 
)