매월 둘째 날을 구하는 방법

매월 둘째 날을 구하는 방법

HPUX에서 매월 둘째 날(예: 8월 2일)을 얻는 방법입니다.

date -dHPUX 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

그건 그렇고, calFreeBSD와 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

관련 정보