我必须在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程序并且它运行良好但问题是它会产生一些开销并且会在执行时产生更多变化。
答案 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
的输出感兴趣。 "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[*]}"
)