O último dia do mês atual deve ser:
$ date -d "$(date +%Y-%m-01) +1 month -1 day"
Mon Jul 31 00:00:00 CEST 2017
Meu menor:
awk '{a=system("date -d \"$(date +%Y-%m-01) +1 month -1 day\" +%d")}END{print a}'
De acordo com o link O último dia pode ser visto usando este comando date
:
$ date -d "-$(date +%d) days -1 month"
Wed May 31 21:20:31 CEST 2017
Minha pergunta é: como posso obter somente o dia e atribuí-lo a uma variável, que eu usarei mais tarde, como
awk '{day=system("date -d \"-$(date +%d) days -1 month\")"; print day)}'
Assim, por exemplo, a impressão day produzirá apenas 31 . Eu sei que o formato de data precisa ser formatado, mas não consigo entender como imprimir apenas o último dia dele.
Ou se houver outro método mais simples em awk
, ele também fará o trabalho.
EDITAR Alguma solução muito suja ..
$ awk '{a=system("date -d \"-$(date +%d) days -1 month\"| cut -f 3 -d \" \""); }END{print a}'
31
Alguém tem uma ideia mais simples / limpa?
Use apenas uma string de formato para a chamada externa de date
:
$ date -d "-$(date +%d) days +1 month" +%d
31
Tente isto:
month=$(cal 07 2017)
lastday=${month: -24: 2}
echo $lastday
Estou usando a função de calendário para carregar a variável "mês" com todos os dias do mês e, em seguida, selecionar os dois últimos caracteres. O exemplo é para julho de 2017, mas funciona com e mês / ano.
lastday=$(cal 07 2017|awk 'END{print day};{if (NF>0){day=$NF}}')
Isso obtém o valor do último dia da última linha do calendário, ignorando as linhas em branco.
Um pouco mais curto é:
lastday=$(cal 07 2017|awk 'END{print day};{NF>0 && day=$NF}')
Tags text-processing date awk gawk