date +"%B %d"
Wird angezeigt January 1
date +"%b %d"
Wird angezeigt Jan 1
Gibt es eine Möglichkeit, die Monatsnummer mit einem Skript in einen Namen umzuwandeln?
Beispiel:
2013-10-22
wird werden Oct 22
Vielen Dank.
Übrigens, ich habe kein GNU-Datum und mein Betriebssystem ist AIX.
date +"%B %d"
Wird angezeigt January 1
date +"%b %d"
Wird angezeigt Jan 1
Sie sollten ein brauchbares awk
(oder nawk
) haben:
BEGIN { nmon=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",month) for(mm=1;mm<=nmon;mm++) { month[month[mm]]=mm month[sprintf("%02i",mm)]=month[mm] } } /[12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ { split($1,bits,/-/) printf("%s %02i\n",month[bits[2]],bits[3]) }
Der BEGIN{}
Block erstellt einen Mapping-Hash. Dies ist ein allgemeinerer Zweck, als Sie unbedingt benötigen (ich habe ihn zufällig herumliegen lassen). Die Indizes sind der Kurzname, die Monatsordnungszahl (Zahl) und die zweistellige Monatsordnungszahl mit einer führenden Null. Das heißt, Sie können den Namen in eine Zahl umwandeln oder umgekehrt. Sie können es auch leicht für lange Monatsnamen anpassen (und möglicherweise für die Lokalisierung, aber lassen Sie uns nicht mitreißen).
Der nächste Block sucht nach Zeilen, die eine wahrscheinlich aussehende Datumszeichenfolge enthalten, teilt sich nach "-" und konvertiert das Datum. (Dies funktioniert auch in gawk
, aber wenn Sie das haben, dann strftime()
und mktime()
sind eine elegantere Lösung.)
Eine grundlegende ksh
Shell-Version, da AIX Folgendes hat ksh
:
set -A month pad Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec while IFS=- read yyyy mm dd junk; do echo $ done
Hierbei wird ein Array verwendet (POSIX sh
hat jedoch keine Arrays, bash
also können Sie auch etwas ähnliches damit machen). Beachten Sie, dass es darauf ankommt ksh
, die führende 0 in einer Monatsnummer zu behandeln, es wird nur als Ganzzahl behandelt. Da ksh
(und bash
) Arrays auf Null basieren, stopfen wir einen Dummy- "Pad" -Wert in den Index 0, anstatt mit + 1 / -1 für Indizes zu spielen.