Команда Linux, чтобы получить подробности четверти
Мне нужно поставить текущую дату в команду Linux, которая выдаст мне вывод для
quarter number
У меня два запроса
date +"%Yq$(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)"
результат -> 2015q3 (текущий квартал)
date +"%Y %m" | awk '{q=int($2/4);y=$1;if (q==0){q=4;y=y-1;}; printf("%sq%s\n", y, q);}'
результат -> 2015q2 (предыдущий квартал)
Можете ли вы помочь изменить вышеуказанные запросы, чтобы получить желаемый результат? заранее спасибо.
1 ответ
Решение
Иногда KISS (будь проще) - самый простой ответ:
year=$(date +%Y)
case $(date +%m) in
01|02|03) let year=year-1
echo ${year}q4 1 oct $year - 31 dec $year oct nov dec ;;
04|05|06) echo ${year}q1 1 jan $year - 31 mar $year jan feb mar ;;
07|08|09) echo ${year}q2 1 apr $year - 31 jun $year apr may jun ;;
10|11|12) echo ${year}q3 1 jul $year - 31 sep $year jul aug sep ;;
esac
Самый простой способ использовать их отдельно - это добавить их как функцию в скрипт оболочки, который вы хотите вызвать, например:
getquarter(){
year=$(date +%Y)
case $(date +%m) in
01|02|03) let year=year-1
qtr="${year}q4" range="1 oct $year - 31 dec $year" months="oct nov dec" ;;
04|05|06) qtr="${year}q1" range="1 jan $year - 31 mar $year" months="jan feb mar" ;;
07|08|09) qtr="${year}q2" range="1 apr $year - 31 jun $year" months="apr may jun" ;;
10|11|12) qtr="${year}q3" range="1 jul $year - 31 sep $year" months="jul aug sep" ;;
esac
}
getquarter
echo "last quarter was $qtr, from $range, for $months"
Если вы не можете этого сделать, вы можете вызвать скрипт после вызова функции и передать аргументы в кавычках:
getquarter(){ ... as above }
getquarter
myscript "$qtr" "$range" "$months"