staging.inyokaproject.org

cal Ausgabe in "Zeichenkette" umwandeln

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

RealMabuse

Avatar von RealMabuse

Anmeldungsdatum:
23. Oktober 2015

Beiträge: 8

Hallo zusammen!

Ich versuche mit $(echo cal | awk '{print $NF}) den Monatsletzten des aktuellen Monats zu ermitteln.

Leider erzeugt cal dabei einen sehr seltsamen Zeichensatz (ich vermute es ist Unicode oder sowas) den ich später nicht vergleichen kann.

Ein "if [ "$(echo cal | awk '{print $NF})" = "$(date +%d)" ]; then ..." ist niemals wahr, auch wenn der Monatsletzte die 30 ist und wir heute den 30. April haben.

Gibt man den Wert des Ausdrucks an "xxd -p" weiter, dann kommt dabei "5f08335f08300" raus, bei "$(date +%d)" ist es nur "33300a".

Ich vergleiche jetzt die Teilstrings der Hexdumps, aber das ist ja irgendwie doch auch nicht Sinn der Sache... kann man irgendwie cal überreden seine Ausgabe in einen "normalen" Zeichencode zu stecken? Oder date seine Ausgabe so rauszubringen wie cal damit man die einfach nur vergleichen kann?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

RealMabuse schrieb:

Leider erzeugt cal dabei einen sehr seltsamen Zeichensatz (ich vermute es ist Unicode oder sowas) den ich später nicht vergleichen kann.

Das sind Shell-Escape-Codes, um den aktuellen Tag farblich zu markieren.

Ich vergleiche jetzt die Teilstrings der Hexdumps, aber das ist ja irgendwie doch auch nicht Sinn der Sache... kann man irgendwie cal überreden seine Ausgabe in einen "normalen" Zeichencode zu stecken? Oder date seine Ausgabe so rauszubringen wie cal damit man die einfach nur vergleichen kann?

Laut Manpage geht das nur mit ncal, nicht mit cal, der Schalter -h sorgt dafür, dass der aktuelle Tag nicht markiert wird und -b sort dafür, dass die Ausgabe wie bei cal formatiert wird:

$ ncal -bh | awk 'END {print $NF}'
30 

Mit date allein sollte man den letzten Tag eines Monats so bekommen, indem man zum ersten des aktuellen Monats einen Monat addiert und einen Tag abzieht (nur den Tag zu vergleichen ist je nachdem was man vorhat etwas wacklig, daher würde ich im Zweifelsfall Monat und Jahr dazu nehmen):

$ date -d "$(date +%m)/01 +1 month -1 day" +%Y-%m-%d
2018-04-30 

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

1
2
$ echo cal
cal

Merkst Du etwas? ☺

1
2
3
4
5
$ cal | awk '{print $1;exit}'
April
$ month=$(cal | awk '{print $1;exit}')
$ echo "$month"
April
Antworten |