如何在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

我使用日历函数加载“月”变量以及该月的所有天数,然后选取最后两个字符。该示例针对的是 2017 年 7 月,但它适用于 和 月/年。

相关内容