Como obter o valor do último dia do mês atual no awk

1

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?

    
por fugitive 12.07.2017 / 21:25

4 respostas

3

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}'
    
por 12.07.2017 / 23:52
1

Use apenas uma string de formato para a chamada externa de date :

$ date -d "-$(date +%d) days +1 month" +%d
31
    
por 12.07.2017 / 22:44
0

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.

    
por 12.07.2017 / 22:12
0
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}')
    
por 12.07.2017 / 22:16