秒数を 時:分:秒 のフォーマットに変換するbashスクリプト
とある処理プログラムの所要時間が秒単位で出力されるように実装されていて、しかしその処理時間は数十分に及ぶこともあるため、実際の処理時間が直感的に分かりづらいという状況がありました。そこで秒数を入力したら時:分:秒 のフォーマットで出力するスクリプトを用意することにしました。
といっても、ゼロから書くのは面倒なので、こちらのスクリプトを参考にしつつ、echo で出力している箇所を printf に置き換えてみました。もとのスクリプトは時、分、秒の数値をそのまま出力していますので、0:1:3 のように一桁の数値が交じると見づらかったのですが、printf で %02d にフォーマットすることで見やすくなりました。
#!/bin/bash
#
# original from https://qiita.com/hryshtk/items/fc46b2e2d8c13016e0d4
#
if [ $# -eq 2 ]; then
start_time=$1
end_time=$2
elif [ $# -eq 1 ]; then
start_time=0
end_time=$1
fi
diff=$((end_time - start_time))
let day="$diff / 86400"
let diff="$diff % 86400"
let hour="$diff / 3600"
let diff="$diff % 3600"
let minute="$diff / 60"
let second="$diff % 60"
printf "%dday %02d:%02d:%02d\n" ${day} ${hour} ${minute} ${second}