在Java程序中,我通常使用以下函数来分析时间信息:
...
long start = System.currentTimeMillis();
...
...
System.out.println("elapsed time 1: "+(System.currentTimeMills() - start));
...
...
start = System.currentTimeMillis();
...
System.out.println("elapsed time 2: "+(System.currentTimeMills() - start));
...
如何在shell bash中执行类似的操作?此外,如果存在循环,如何收集累积时间?
例如
for ((i=0;i<$lines;i=i+$step))
do
head -$((i+step)) $1 | tail -$step > tmp1
head -$((i+step)) $2 | tail -$step > tmp2
setstr=$setstr' '`./accuracy.sh tmp1 tmp2`
done
echo $setstr | awk '{for (i=1;i<=NF;i++) sum+=$i; }END{print sum/NF}'
我想分别评测累积的head/tail
时间和accuracy.sh tmp1 tmp2
时间。
您可以在要计时的命令前面加上适当命名的time
命令。
例如:
time find . -type f -name hello_world.cc
或者在您的情况下:
time head -$((i+step)) $1 | tail -$step > tmp1
time head -$((i+step)) $2 | tail -$step > tmp2
time setstr=$setstr' '`./accuracy.sh tmp1 tmp2`
请注意,时间输出到tty
,因此您不必担心定时结果被写入tmp1
或tmp2
等。
如果你想实时查看(自脚本开始运行以来)更新的总运行时间,你可以这样做:
在脚本开始时,记下系统时间:
start_timestamp=$(date +%s)
然后开始你的实际脚本主:
# Do your execution here
然后在你的循环中,无论你想在哪里看到到目前为止经过的时间的输出
curr_timestamp=$(date +%s)
elapsed_time=$(expr $end_time - $start_time)
echo "Elapsed: $elapsed_time" >> elapsed_time.log