私はこのスクリプトを書いており、プログラムを実行して時間を測定し、その時間をテキストファイルに書き込む必要があります。小数点以下 6 桁まで秒単位で入力する必要があります。これまで私はこれを持っています:
#!/bin/bash
MAX_THREADS=8 #2 x number of cores
if [ $# -ne 2 ]; then #checks number of arguments
echo Invalid number of arguments
exit 1
else
NUM_THREADS=$1
fi
if [ $NUM_THREADS -gt $MAX_THREADS ]; then
echo Invalid number of threads
exit 1
fi
make clean
make
start=$(date +%s)
./CircuitRouter-SeqSolver $2
end=$(date +%s)
cat > $2.speedup.csv << EOF
$((end-start))
EOF
スクリプトの他の部分では、NUM_THREADSに関連するすべてのコンテンツを無視できます。だからきれいにし、$2を引数としてCircuitRouter-SeqSolverを実行します。日付があるこの解決策を見ましたが、小数点以下の桁なしで秒のみを記録するため、ファイルにゼロのみを記録します。プログラムが1秒もかからなかったからです。完璧。 10進数を書き込むように日付を変更する方法は?
ベストアンサー1
date
GNUバージョンを想定すると:
start=$(date +%s.%N)
./CircuitRouter-SeqSolver $2
end=$(date +%s.%N)
%N
他のバージョンにはナノ秒部分がある場合とない場合があります。解像度を小数点以下6桁に制限するにはいくつかの操作を実行できますが、最も簡単な方法はおそらく次のとおりです。
printf "%0.6f\n" $((end-start))
bash
編集:浮動小数点数学を実行しない問題を修正する:
printf %0.6f\n" $(echo $end-$start | bc)