Linux-Befehl zum Abrufen von Quartalsdetails

Linux-Befehl zum Abrufen von Quartalsdetails

Ich muss das aktuelle Datum in einen Linux-Befehl umwandeln, der mir eine Ausgabe für

 quarter number     

Ich habe zwei Fragen

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

Ergebnis -> 2015q3 (aktuelles Quartal)

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

Ergebnis -> 2015q2 (vorheriges Quartal)

Können Sie bitte helfen, die obigen Abfragen zu ändern, um das gewünschte Ergebnis zu erhalten? Vielen Dank im Voraus.

Antwort1

manchmal ist KISS (keep it simple) die einfachste Antwort:

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

Der einfachste Weg, diese separat zu verwenden, besteht darin, sie als Funktion in das Shell-Skript einzufügen, das Sie aufrufen möchten, z. B.:

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"

Wenn das nicht möglich ist, können Sie Ihr Skript nach dem Aufruf der Funktion aufrufen und die Argumente in Anführungszeichen übergeben:

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

verwandte Informationen