3桁の長さを確保するために、日付/時刻値を入力します。

3桁の長さを確保するために、日付/時刻値を入力します。

YYYY'DDD'TTT形式でタイムスタンプをレンダリングするスクリプトがあります。ここで Y = 年、D = 365 日、T = 1000 日目の時間です。

#!/bin/bash
clear
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432))
d=$(date +%j)
y=$(date +%Y)
printf "$y\`$d\`$t" "$y" "$d" "$t"

しかし、DとTが常に3つの文字値を生成するように変更する必要があります(たとえば、1月1日には「1」ではなく「001」、1日の最初の分には「1」ではなく「001」) - I何すべきか分からない。

どんな助けでも大変感謝します。

答え1

printfたぶんフォーマット文字列を見ることができます。最初の引数は、後続の各引数のプレースホルダをprintf含む書式文字列でなければなりません。

符号付き10進形式の引数を含めることができ、ゼロ%dパディング文字を前に付けることができますd0nn

printf "%d/%d/%d" 2011 2 3

出力されます2011/2/3

printf "%04d/%03d/%05d" 2011 2 45

出力しなければならない 2011/002/00045

答え2

date仕事に行こう!

date +%3j

その後、ミリ秒の部分の場合、簡単な方法は1000にミリ秒数を加えて先行1。したがって、スクリプトの場合:

s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432 + 1000))
date "+%Y'%3j'${t#1}"

関連情報