명령줄에서 연도 분기 날짜를 생성하는 방법은 무엇입니까?

명령줄에서 연도 분기 날짜를 생성하는 방법은 무엇입니까?

이번 연도 분기와 이전 달 연도 분기의 표현을 출력하고 싶습니다.

오늘이 2012년 1월 1일이라면,

2012q1

그리고

2011q4

각각의 출력으로.

답변1

BASH 산술 평가 및 GNU 명령을 사용하는 (다소 추악한) 솔루션 date:

echo $(date +%Y)q$(( ($(date +%-m)-1)/3+1 ))
echo $(date -d "-1 month" +%Y)q$(( ($(date -d "-1 month" +%-m)-1)/3+1 ))

%-m0 패딩을 차단 하므로 date8월과 9월에도 여전히 작동합니다.

답변2

4로 나누는 모든 해는 실패합니다(예: 11월).

% echo $(( 11/4+1 ))
3

올바른 수학은 다음과 같습니다.

$(( (m-1)/3 +1 ))

따라서 이번 달과 지난 달 분기는 다음과 같습니다.

echo curr ${y}q$(((m-1)/3+1))
if [ $m = 1 ]; then
  echo prev $((y-1))q4
else
  echo prev ${y}q$(((m-2)/3+1))
fi

12개의 값을 확인해보세요. 정말...

% for m in {1..12}; do echo $m Q$(((m-1)/3+1)); done
1 Q1
2 Q1
3 Q1
4 Q2
5 Q2
6 Q2
7 Q3
8 Q3
9 Q3
10 Q4
11 Q4
12 Q4

답변3

내 것을 사용해날짜 도구:

dconv 2012-01-01 -f '%Y%Q'
=>
  2012Q1

%q플래그는 dateutils %Q에만 적용되며 분기를 숫자 또는 형식으로 반환합니다 Q<NUMBER>.

답변4

날짜 분할 형식을 사용하고, awk를 사용하여 계산하고, printf를 사용하여 형식을 지정합니다.

date +"%Y %m" | awk '{printf ("%4dq%1d\n", $1, ($2/4)+1)}'

그냥 데이트와 파티:

echo $(date +%Yq)$(($(date +%m)/4+1))

관련 정보