На Linux CLI, есть ли способ получить номер недели месяца? Может быть, есть другой способ получить это с помощью одной простой (как date
) команды? Допустим, 1-7 день - первая неделя, 8-14 день - вторая неделя и так далее.
На Linux CLI, есть ли способ получить номер недели месяца? Может быть, есть другой способ получить это с помощью одной простой (как date
) команды? Допустим, 1-7 день - первая неделя, 8-14 день - вторая неделя и так далее.
Ответы:
Команда date
не может сделать это внутренне, поэтому вам нужна внешняя арифметика.
echo $((($(date +%-d)-1)/7+1))
Изменить: добавлен знак минус между% и d
Вы можете использовать это:
Понедельник первый день недели
WEEKNUMBER=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
Воскресенье ели неделю
WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))
упрощение решения Виктора Санчеса:
expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))
замените% V на% U, если вы хотите, чтобы недели начинались с воскресенья.
btw: пришлось использовать expr вместо $ ((...)), потому что последним, похоже, не нравятся числа с ведущими нулями.
Если вы принимаете внешние инструменты в своем квесте, попробуйте dateutils . У него есть понятие даты появления в течение месяца, то есть 27 апреля 2012 года - четвертая пятница апреля 2012 года, что просто совпадает с определением вашей недели. Чтобы получить этот номер, используйте:
dconv 2012-04-27 -f %c
=>
04
%c
(count) - спецификатор формата для вхождения в течение месяца. Или чтобы быть еще круче, попробуйте
dconv today -f '%cth %a in %b %Y'
=>
1st Wed in Sep 2012