Konvertieren Sie die Monatsnummer in den Monatsnamen

3000
peja11

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.

2

2 Antworten auf die Frage

1
Ash King
date +"%B %d" 

Wird angezeigt January 1

date +"%b %d" 

Wird angezeigt Jan 1

1
mr.spuratic

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 kshShell-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 shhat jedoch keine Arrays, bashalso 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.