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"