HPUX에서 매월 둘째 날(예: 8월 2일)을 얻는 방법입니다.
date -d
HPUX Unix에서는 작동하지 않습니다.
답변1
GNU 및 busybox를 사용하여 구현되었습니다.
$ date -d '2020-08-02' "+%A"
Sunday
FreeBSD의 경우:
$ date -j -f "%d %m %Y" "02 08 2020" "+%A"
Sunday
1년 중 모든 달의 둘째 날을 얻으려면 다음 days-in-a-year.sh 스크립트를 사용할 수 있습니다.
#!/usr/bin/env sh
year=2021
month=1
while [ $month -le 12 ]; do
# GNU and busybox
date -d "$year-$month-02" "+%d %B %Y: %A"
# FreeBSD
# date -j -f "%d %m %Y" "02 $month $year" "+%d %B %Y: %A"
month=$(( month + 1 ))
done
산출:
$ ./days-in-a-year.sh
02 January 2021: Saturday
02 February 2021: Tuesday
02 March 2021: Tuesday
02 April 2021: Friday
02 May 2021: Sunday
02 June 2021: Wednesday
02 July 2021: Friday
02 August 2021: Monday
02 September 2021: Thursday
02 October 2021: Saturday
02 November 2021: Tuesday
02 December 2021: Thursday
그건 그렇고, cal
FreeBSD와 Linux에서 사용할 수 있고 명령줄에서 달력을 표시할 수 있는 util-linux 패키지의 일부라는 멋진 유틸리티가 있습니다.
$ cal
August 2021
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
답변2
HPUX에서 작동해야 한다고 생각하는 POSIX 솔루션을 사용하면 다음과 같이 시작할 수 있습니다.cal
year=2021 month=8 # Omit entirely for current year and month
cal $month $year |
sed -nE 's/ 2( .*|)$//p' |
awk '{ split("Sun Mon Tue Wed Thu Fri Sat",h); print h[length($0)/3+1]}'
산출
Mon
설명하다
이 cal
명령은 달력을 인쇄합니다.
cal
August 2021
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
{space} 2 {space}
줄 끝에서 패턴이나 a를 찾아 그 뒤의 모든 항목을 삭제합니다. {space} 2
그런 다음 결과 행의 길이를 3(일주일 동안 열당 3자)으로 나누고 1
요일 배열의 인덱스에 추가합니다.
sed
( 로 병합 할 수도 있었지만 awk
추가 복잡성으로 인해 노력할 가치가 없다고 판단했습니다.)
여기에서 원하는 대로 일년 중 몇 달 동안 반복하는 것이 간단합니다.
year=2021
for month in January February March April ...
do
day=$(
cal "$month" "$year" |
sed -nE 's/ 2( .*|)$//p' |
awk '{
split("Sunday Monday Tuesday Wednesday Thursday Friday Saturday", h);
print h[length($0)/3+1]
}'
)
printf "%02d %s %d: %s\n" 2 "$month" "$year" "$day"
done
답변3
cu=`date +%d`
date --date="$(date --date='1 month ago') -$cu days +2days" +%A" "%Y-%m-%d
Friday 2021-07-02
date --date="$(date --date='1 month') -$cu days +2days" +%A" "%Y-%m-%d
Thursday 2021-09-02