1. ホーム
  2. bash

時刻コマンドのカスタムフォーマット

2023-11-25 02:58:30

質問

を使いたいのですが 時間 コマンドを bashスクリプト で、スクリプトの経過時間を計算し、それをログファイルに書き出すことができます。 必要なのは 実時間 だけで、ユーザとシステムは必要ありません。 また、まともなフォーマットで必要です。例えば、00:00:00:00(標準出力のようなものではない)。 私はどんなアドバイスでも感謝します。

期待されるフォーマットは 00:00:00.0000 (ミリ秒) [時]:[分]:[秒].[ミリ秒].

私はすでに3つのスクリプトを持っています。こんな例もありましたね。

{ time { # section code goes here } } 2> timing.log

しかし、私は実時間だけが必要で、ユーザとシステムには関係ありません。また、適切なフォーマットが必要です。 00:00:00:00 (標準出力のようなものではなく)。

つまり、時間出力を処理しやすいものにする方法を知りたいのです。

どのように解決するのですか?

あなたは date コマンドを使って、時間を計測する作業を行う前と後の現在時刻を取得し、その差を次のように計算します。

#!/bin/bash

# Get time as a UNIX timestamp (seconds elapsed since Jan 1, 1970 0:00 UTC)
T="$(date +%s)"

# Do some work here
sleep 2

T="$(($(date +%s)-T))"
echo "Time in seconds: ${T}"

printf "Pretty format: %02d:%02d:%02d:%02d\n" "$((T/86400))" "$((T/3600%24))" "$((T/60%60))" "$((T%60))""

注意事項 $((...)) での基本的な算術演算に使用することができます。 バッシュ - 注意: マイナスの前にスペースを入れてはいけません。 - これはコマンドラインオプションとして解釈される可能性があるためです。

こちらもご覧ください。 http://tldp.org/LDP/abs/html/arithexp.html

EDITです。

さらに、以下のようなものがあります。 セド で生成された出力から部分文字列を検索して抽出します。 時間 .

EDITです。

ミリ秒(実際にはナノ秒ですが、ここではミリ秒に切り捨てています)でタイミングをとる例です。あなたのバージョンの date をサポートしなければなりません。 %N の形式と bash は大きな数字をサポートする必要があります。

# UNIX timestamp concatenated with nanoseconds
T="$(date +%s%N)"

# Do some work here
sleep 2

# Time interval in nanoseconds
T="$(($(date +%s%N)-T))"
# Seconds
S="$((T/1000000000))"
# Milliseconds
M="$((T/1000000))"

echo "Time in nanoseconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d.%03d\n" "$((S/86400))" "$((S/3600%24))" "$((S/60%60))" "$((S%60))" "${M}"

免責事項

私のオリジナルは

M="$((T%1000000000/1000000))"

というのがありましたが、これはどうやら一部の人には動作しないようなので編集されましたが、新しいバージョンでは動作することが報告されています。私は、残りを使わなければならないと思うので、これを認めませんでしたが、反対票を入れられました。

自分に合ったものを選びましょう。