eventuell würde es etwas helfen wenn du für de ganzem Cronprozess die LC Variable setzt,
an den Anfang der crontab. Würde ich aber nur in einer Crontab eines Users machen und nicht in der von root.
ansonsten gehen auch die Datumsformate innerhalb einer Datei noch umzubauen, ist aber etwas aufwendiger.
vloryan schrieb:
Ich habe in meinem "datum.txt" ein Datum im folgenden Format: "DD.MM.YYYY" und möchte nun den Wochentag auf Deutsch voranstellen und in dieser Textdatei speichern. Und zwar als SO., MO., DI. MI. DO., FR. oder SA.
eine kleiner Ausschnitt aus der Datei wäre an dieser Stelle sehr hilfreich, da dieser hier leider nicht gekommen ist baue ich einfach mal eine solche Datei auf gut dünchen mit folgendem Befehl
Code:
for i in $(seq 1 100) ; do echo "hallo $(date -d -${i}day +%d.%m.%Y) hallo hallo"; done > testfile.txt
die
testfile.txt sieht jetzt wie gleich folgt aus, das 2. Feld ist dein Datum dem du noch die Wochentage voraus stellen willst. (selbstverständlich wirst du dein Datum in deiner Datei nicht als 2. Stehen haben, dann müssen eben alle folgende Beispiele da leicht umgebaut werden. Und eventuell hast du auch noch die Zeit im Format und hast uns das aber in der Aufgabenstellung nicht gesagt, auch dann sind kleine Veränderungen eventuell notwendig.)
Code:
hallo 26.05.2014 hallo hallo
hallo 25.05.2014 hallo hallo
hallo 24.05.2014 hallo hallo
hallo 23.05.2014 hallo hallo
hallo 22.05.2014 hallo hallo
hallo 21.05.2014 hallo hallo
hallo 20.05.2014 hallo hallo
Das Format "DD.MM.YYYY" ist nun uns Deutschen zwar sehr vertraut, doch für irgendwelche Zeitfunktionen ist dieses Format als Eingangsformat absolut nicht brauchbar, es muss vorher umgestellt werden zB auf YYYY-MM-DD
Dazu könnte man die Datei über
sed filtern, und dabei ein gefundenes Format entsprechend umstellen.zB so hier
Code:
cat testfile.txt | sed 's/ \([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\ / \3-\2-\1 /'
Andere Methode dieses zu tun, wäre hier auch mit
awk möglich, auch mit
bash selbst geht es, sieht nur mit der nackte bash aber auch nicht schöner aus.
Aber immer noch kein Wochentag. Dazu muss man wieder eine Zeitfunktion nehen, zB das
date Kommando. und dieses YY-MM-DD Format als das Eingabedatum nehmen und hinten die richtige gewünschte Formatierung angeben. Dazu muss man diesen Prozess dann eben als User laufen lassen der die richtigen LC-Variablen gesetzt hat, oder diese vorher im Script bei root entsprechend richtig setzen.
Das ganze also in einer Schleife könnte dann zB so hier aussehen.
Code:
cat testfile.txt | sed 's/ \([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\ / \3-\2-\1 /' | while read A B C D
do
BB=$(date -d "$B" +"%a %d.%m.%Y")
echo "$A $BB $C $D"
done
Ergebnis ist jetzt
Code:
hallo So 25.05.2014 hallo hallo
hallo Sa 24.05.2014 hallo hallo
hallo Fr 23.05.2014 hallo hallo
hallo Do 22.05.2014 hallo hallo
hallo Mi 21.05.2014 hallo hallo
hallo Di 20.05.2014 hallo hallo
ist zwar immer noch nicht das was du unbedingt haben willst, aber schon etwas näher dran, die Wochentage sind noch Ml,Di,Mi.....
und nicht MO,DI,MI......., das sollte aber nicht das Problem sein, einfach noch ein Befehl mehr oder das der Bash machen lassen.
geht ganz einfach anstatt $BB mit echo auszugeben ${BB^^*} schreiben. die echo Zeile also schreiben.
Andere Methode da Geier0815 hier schon awk mit in's Spiel gebracht hat, ( ich wars nicht)

das Ganze dann gleich komplett mit awk erledigen.
Code:
awk '{split($2,D,"."); T=sprintf("%04d %02d %02d 00 00 00",D[3],D[2],D[1]); t=mktime(T); $2=strftime("%a %d.%m.%Y",t); print }' testfile.txt
auch hier sind die Wochentage noch Mo,Di,Mi......, aber wer einigermaßen versteht was dort gemacht wird, sollte das auch ohne große Probleme in MO,DI,MI...... umwandeln können, die awk-Funktion wäre
toupper() dafür.
robi