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

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

  • Использование AWK для объединения файлов
  • Утечка памяти gawk в частоте слова
  • Объединить две операции в одну команду - awk
  • Самый эффективный способ сделать полмиллиона операций математики ежечасно
  • gnuwin bash Если файл .txt содержит строковый файл-копию
  • текстовая обработка (чтение и вычисление из двух файлов)
  • Что означает vRS = "\ n20" в командной строке gawk?
  • Как сохранить смешанные форматы перевода строки в gawk?
  • 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}') 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.