Linux
Gestern-Problem
Kennst Du das auch ? Um in einem Script die Logfiles vom Vortag auszuwerten, benötigt man das gestrige Datum. Nur - Wie bekommt man's ?
Zum gestrigen Datum fallen einem doch spontan drei "Algorithmen" ein:
- Ein Tool, das das gestrige Datum direkt ausgibt
- Ein Tool, das z.B. die Sekunden seit Epoch (1.1.1970, 0:00:00 Uhr) ausgibt, einen Tag (in Sekunden) davon abzieht und diese Sekunden wieder rückwandelt
- Eine komplette Kalenderberechnung, der Vollständigkeit halber natürlich unter Berücksichtigung der kompletten Schaltjahresregeln (und für die Erbsenzähler unter uns natürlich nicht zu vergessen: Der Sprung vom Julianischen in den Gregorianischen Kalender).
- date
- Hmm, GNU-date kennt Ausdrücke wie
~> date --date 'yesterday'
oder auch
~> date --date '1 day ago'
. Das entspricht dem oben aufgezählten 1. Algorithmus (Tools, die das direkt beherrschen). Plattformunabhängig ist das aber nicht.
Dann gibt's da natürlich noch
~> date +%s
Das ist der erste Teil vom 2. Algorithmus (Rechnen mit Sekunden seit Epoch). Leider kann selbst GNU-date (geschweige denn das Feld-Wald-und-Wiesen-date der kommerziellen Unix-Hersteller) nicht Sekunden rückwandeln in ein Datum.
Und nicht vergessen: GNU-date ist nicht plattformunabhängig (kann aber natürlich auf vermutlich allen relevanten Plattformen installiert werden)
- awk
- Ja, auch gawk kann mit Sekunden seit Epoch umgehen. Damit ist der 2. Algorithmus implementierbar.
Mir ist kein "normaler" awk bekannt, der das kann. Schade
Plattformunabhängig ist das daher auch nicht.
- Shell + cal
- Nun, wir können immer noch den 3. Algorithmus (komplette Kalenderberechnung) umsetzen.
Hier nur kurz die Idee: Wir nehmen cal für die eigentliche Kalenderberechnung (wieviele Tage hat welcher Monat in welchem Jahr) und machen mit etwas einfacher Arithmetik in der Shell den Rest.
- perl
- Logisch, perl kann den zweiten Algorithmus (Rechnen mit Sekunden seit Epoch) problemlos umsetzen.
Dazu verweisen wir auf unsere Seite Datumsberechnungen in Perl. Dort ist auch ein Modul beschrieben, die unser Problem löst.
- tcl, python, ...
- (Setze hier deine bevorzugte Sprache ein): Ja, die können das vermutlich alle auch. Aber nicht hier.
War das alles ? Unix wäre nicht Unix, wenn da nicht noch "Guru"-Weg wäre:
Die Umgebungsvariable TZ beschreibt die Zeitzone, in der sich der Anwender zuhause fühlt (nicht zwangsläufig die Zeitzone, in der das System läuft!). Steht das System in Frankfurt und hat dementsprechend TZ=CE(S)T bzw. GMT-1/GMT-2 (je nach Sommerzeit/Winterzeit) gesetzt, kann der Anwender in Greenwich trotzdem durch Setzen von
~> export TZ=GMT
~> date
sich die Zeit in seiner Zeitzone anzeigen lassen. Dieses kann man nun nutzen:
~> TZ=GMT+22 date (in der Sommerzeit)
~> TZ=GMT+23 date (in der Winterzeit)
liefert einem das gestrige Datum (ok, die Uhrzeit stimmt nicht, und das Ganze läuft auch nicht zwischen 00:00 und 01:00 Uhr, aber immerhin!).
Quelle: http://sysadminscorner.uherbst.de/shell/yesterday.html
Tags: -
Verwandte Artikel:
Letzte Änderung des Artikels: 2007-03-15 10:50
Verfasser des Artikels: Florian Schrön
Revision: 1.0
Kommentieren nicht möglich