Как получить значение последнего дня в текущем месяце в 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 есть еще один более простой метод, он также сделает работу.

EDIT Некоторые очень грязные обходные пути ..

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

У кого-нибудь есть более простая / чистая идея?

  • Разница между gawk и awk
  • как конкатенировать следующую строку, когда условие истинно awk
  • Найти Максимум всех столбцов на основе отдельного первого столбца
  • Как подключить сортировку к gawk?
  • Как изменить только последнюю строку (или любые конкретные номера строк) с помощью команды awk?
  • Что означает vRS = "\ n20" в командной строке gawk?
  • awk условие true и false
  • Объединить столбец на основе 2-го столбца
  • 4 Solutions collect form web for “Как получить значение последнего дня в текущем месяце в awk”

    Последний день текущего месяца должен быть:

     $ 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}' 

    Просто используйте строку формата для внешнего вызова date :

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

    Попробуй это:

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

    Я использую функцию календаря для загрузки переменной «месяц» со всеми днями месяца, а затем выбирая последние два символа. Пример – июль 2017 года, но он работает с месяцем и годом.

     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}') 
    Linux и Unix - лучшая ОС в мире.