awkでその月の最終日の値を取得する方法

awkでその月の最終日の値を取得する方法

~によると協会最後の日を表示するには、次のコマンドを使用しますdate

$ date -d "-$(date +%d) days -1 month"
Wed May 31 21:20:31 CEST 2017

私の質問は、どのように取得できますか?ただ 仕事を指定し、後で使用する変数に割り当てます。

awk '{day=system("date -d \"-$(date +%d) days -1 month\")"; print day)}' 

たとえば印刷出力のみ31。日付形式の形式を指定する必要があることはわかっていますが、最後の日だけを印刷する方法がわかりません。

awkまたは、タスクを完了するための別のより簡単な方法がある場合。

編集する 非常に汚い解決策..

$ awk '{a=system("date -d \"-$(date +%d) days -1 month\"| cut -f 3 -d \" \""); }END{print a}'

31

もっとシンプルでクリーンなアイデアを持っている人はいますか?

答え1

最後の日現在の月は次のようになります。

$ date -d "$(date +%Y-%m-01) +1 month -1 day"
Mon Jul 31 00:00:00 CEST 2017

私の最短のもの:

awk '{a=system("date -d \"$(date +%Y-%m-01) +1 month -1 day\" +%d")}END{print a}'

答え2

外部呼び出しを行うには、フォーマット文字列を使用してくださいdate

$ date -d "-$(date +%d) days +1 month" +%d
31

答え3

lastday=$(cal 07 2017|awk 'END{print day};{if (NF>0){day=$NF}}')

空の行を無視し、カレンダーの最後の行の最後の日の値を抽出します。

少し短いのは次のとおりです。

lastday=$(cal 07 2017|awk 'END{print day};{NF>0 && day=$NF}')

答え4

この試み:

month=$(cal 07 2017)
lastday=${month: -24: 2}
echo $lastday

カレンダー機能を使用して、「月」変数とその月のすべての日付を読み込み、最後の2文字を選択します。例は2017年7月現在ですが、月/年単位で適用されます。

関連情報