Intereting Posts
Не могли бы вы объяснить это создание «chroot» / tmp? Уменьшить количество процессов Apache2 Перемещение логического тома из одной группы томов в другую Должен ли быть установлен X11-сервер для пересылки X11 поверх ssh? Различные программы, не работающие после yum, устанавливают некоторые пакеты Как найти и заменить текст geany во всех файлах в каталоге? ошибка при попытке установить ubuntu mate 18 LTS: «MODSIGN: не удалось получить список uefi db» AWK | Динамическое преобразование строк в столбцы Прохождение через журналы электронной почты Как перемещать все файлы и папки с помощью команды mv Как я могу запустить команду, если мой экран изменил состояние в режиме ожидания на включение и наоборот Загрузочное устройство / dev / sda1 не существует на Debian в QEmu Инкрементное резервное копирование базы данных postgresql Слишком много открытых файлов в системе в FreeBSD 9 SSH – Как сделать три компьютерных туннеля?

Получить номер предыдущей недели в bash

Мне нужен номер предыдущей недели месяца.

На второй неделе марта предыдущая неделя будет равна 1. В первую неделю апреля предыдущая неделя будет равна 5.

Моя неделя начинается с понедельника.

WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) )) 

Как я могу отнять один из них, чтобы получить предыдущую неделю (если неделя равна 1, у меня есть исключение, поэтому мне не нужно это учитывать).

Было бы неплохо, если бы февраль, только через 4 недели, автоматически распознается.

Если я не ошибаюсь, ваше выражение (реорганизованное здесь немного), находит номер недели, соответствующий первому дню текущего месяца, номер недели, соответствующий сегодняшнему, и вычисляет разницу как неделю-месяц?

 first=$(date -d "-$(($(date +%d)-1)) days") weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) )) 

Если это так, и вы хотите неделю недели на прошлой неделе, не должно быть достаточно, чтобы просто заменить «сегодня» на «7 дней назад» (во всех местах), чтобы получить месяц недели, соответствующий эта дата?

 now="7 days ago" first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days") weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) )) 

Опираясь на date , можно разобрать выражения типа «7 дней назад – 3 дня». date +%V печатает числа недель <10 с начальным нулем, что приведет к их интерпретации как восьмеричных чисел, нарушение 08 и 09 . Добавьте 10# чтобы заставить bash взять числа в десятичном формате.

Немного более короткий способ получить первый день того же месяца:

 first=$(date -d "$now" +"%Y-%m-01") 

(другой формат, но date должна быть способна его интерпретировать).