![3자리 길이를 보장하기 위해 날짜/시간 값을 채웁니다.](https://linux55.com/image/18651/3%EC%9E%90%EB%A6%AC%20%EA%B8%B8%EC%9D%B4%EB%A5%BC%20%EB%B3%B4%EC%9E%A5%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%82%A0%EC%A7%9C%2F%EC%8B%9C%EA%B0%84%20%EA%B0%92%EC%9D%84%20%EC%B1%84%EC%9B%81%EB%8B%88%EB%8B%A4..png)
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가 항상 세 개의 문자 값을 생성하도록 수정해야 합니다(예: 1월 1일에는 "1" 대신 "001", 하루의 첫 번째 분에는 "1" 대신 "001") - I 무엇을 해야할지 모르겠습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
printf
어쩌면 형식 문자열을 살펴볼 수도 있습니다 . 첫 번째 인수는 printf
각 후속 인수에 대한 자리 표시자를 포함하는 형식 문자열이어야 합니다.
부호 있는 10진수 형식의 인수를 포함할 수 %d
있으며 0 패딩 문자를 앞에 붙일 수 있습니다 d
.0n
n
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}"