3

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));
...

シェル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}'

I want to profile the accumulated head/tail time and accuracy.sh tmp1 tmp2 time separately.

4

1 に答える 1

6

適切な名前のコマンドを使用して、時間を計るコマンドの前に付けることができます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`

time は に出力されることに注意してください。そのため、タイミングの結果がorttyに書き込まれることを心配する必要はありません。tmp1tmp2

合計経過時間 (スクリプトの実行が開始されてから) をリアルタイムで確認したい場合は、次のようにします。

スクリプトの開始時に、システム時刻に注意してください。

start_timestamp=$(date +%s)

次に、実際のスクリプト main を開始します。

# Do your execution here

次に、ループ内で、これまでの経過時間の出力を表示したい場所

curr_timestamp=$(date +%s)
elapsed_time=$(expr $end_time - $start_time)
echo "Elapsed: $elapsed_time" >> elapsed_time.log
于 2012-11-10T21:18:00.873 に答える