~によると協会最後の日を表示するには、次のコマンドを使用します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月現在ですが、月/年単位で適用されます。