web-dev-qa-db-ja.com

Mac OS Xでミリ秒単位のBash実行時間を取得する方法は?

私は this を確認しましたが、提供されたソリューションは私にとってはうまくいきませんでした。

日付を使用すると、実行時間を秒単位で取得できます。

T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"

しかし、これを試してみると:

T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"

ナノ秒精度を取得するために日付に%N(上記のとおり)を追加すると、次のエラーが発生します:-bash:1369320760N:値がベースに対して大きすぎます(エラートークンは "1369320760N")

Mac OS Xでbashを使用して実行時間をミリ秒単位で測定する方法を知っている人はいますか?

12
pacodelumberg

OSXはBSD風のシステムであるため、strftimeライブラリには%Nhttp://www.freebsd.org/cgi/man.cgi?query=date

Bash組み込みtimeコマンドは、必要な情報を提供しますか?

time some work here
14
glenn jackman

ミリ秒が必要で、BSDが日付をサポートしていない場合は、このルートを使用します+%s%N

Perl -MTime::HiRes -e 'printf("%.0f\n",Time::HiRes::time()*1000)'
11
hpavc

echo $(($(date +%s%N)/1000000))

これは、ナノ秒からミリ秒に変換されます。

@mpyから、date +%s.%N機能します。

ただし、LinuxとOS Xでは出力が異なります。
linux:1369322592.573787111
OS X:1369322610.N

3
demure

coreutilsをインストールする場合、dateと記述することでGNU Linux gdateを使用できます。

coreutilsはHomebrewで利用可能です:brew install coreutils

3
youyoup

Glennは正解です。timeは探しているコマンドですが、必要な情報を解析するには、sedなどの他のプロセッサに渡す必要があります。

time command-goes-here >/dev/null 2>$1|sed rules-go-here

このコマンドは、コマンド自体からの出力を取り除き(標準出力とエラー出力の両方を/ dev/nullに送信)、時間の結果をsedに渡します。ストリームを編集する適切なルールを選択して、出力を行う必要があります。目的の値。

1
Zach Melnick

他の答えが述べたように、OS Xの日付は%N(ナノ秒)をサポートしていません。

コマンドを時間通りにスクリプトとして保存できますか?または、サブシェルまたはコマンドグループを使用します。

time (sleep 0.1; echo a; sleep 0.1)
time { sleep 0.1; echo a; sleep 0.1; }

または、個々のコマンドの時間を合計します。

$ time=$(TIMEFORMAT=%R; (time sleep 0.1; echo a) 2>&1 > /dev/null)
$ time+=+$(TIMEFORMAT=%R; (time sleep 0.1) 2>&1)
$ bc <<< $time
.206

または、スクリプト言語を使用します。

$ Ruby -e 'puts "%.3f" % Time.now'
1369329611.046
$ time Ruby -e '""'
0.029
$ time Ruby -e 'puts "%.3f" % Time.now'
1369329622.943
0.029

%.3fは、小数点が3つある浮動小数点数の形式指定子です。 Time.now はTimeクラスのクラスメソッドです。

1
Lri