comando de Linux para obtener detalles del trimestre

comando de Linux para obtener detalles del trimestre

Necesito pasar la fecha actual al comando de Linux que me dará resultados para

 quarter number     

tengo dos consultas

date +"%Yq$(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)" 

resultado -> 2015q3 (trimestre actual)

date +"%Y %m" | awk '{q=int($2/4);y=$1;if (q==0){q=4;y=y-1;}; printf("%sq%s\n", y, q);}'

resultado -> 2015q2 (trimestre anterior)

¿Puede ayudarnos a modificar las consultas anteriores para obtener el resultado deseado? gracias de antemano.

Respuesta1

A veces KISS (mantenlo simple) es la respuesta más fácil:

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

La forma más sencilla de usarlos por separado es agregarlos como una función dentro del script de shell que desea llamar, por ejemplo:

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"

Si no puede hacer eso, puede llamar a su secuencia de comandos después de llamar a la función y pasar los argumentos entre comillas:

getquarter(){ ... as above }
getquarter
myscript "$qtr" "$range" "$months"

información relacionada