Intereting Posts
Бесшовный режим с виртуальным боксом: цвет фона на стороне окна Любая программа, подобная `sudo`, чтобы получить root, если два пользователя вводят пароль? ожидаемое целочисленное выражение UTF-8 работает в gnome-терминале только после выбора уже выбранной кодировки Как можно проверить в своей программе, что это сервисный процесс, запущенный systemd? Ядро fglrx 3.18.22 Почему оболочка рыбы должна начать процесс демона? Как получить pacman для использования моих пользовательских PKGBUILD при обновлении? Влияние параметра vm.swappines на систему без раздела подкачки Почему mount.cifs не установлен по умолчанию? nmcli больше не позволяет изменять настройки? На лету сжатие читаемой и записываемой папки (например, Windows EFS)? find: отсутствует аргумент `-exec 'в Cygwin Могу ли я определить архитектуру набора инструкций в vimrc? (ARM против x86) Каково имя автоудара в Linux Mint

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

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

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

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