コマンドラインから年の四半期の日付を生成するには?

コマンドラインから年の四半期の日付を生成するには?

今年の四半期と前月の年の四半期の表現を出力したいです。

今日が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))

関連情報