Manipuleer datums en tijdstippen
Gepubliceerd: Dinsdag 25 oktober 2011
Auteur: Koen Vervloesem
In back-upscripts en andere shellscripts moet je vaak rekenen met datums en/of tijdstippen. De tools uit de collectie dateutils kunnen hierbij heel wat helpen.
Dateutils is een collectie tools om op de commandline met datums en tijdstippen te rekenen en er andere acties op uit te voeren. De programma's dconv, dadd, ddiff, dseq, dtest en dgrep kunnen respectievelijk datums converteren, optellen, verschillen berekenen, sequenties genereren, vergelijken en greppen. De programma's tconv, tadd, tdiff, tseq, ttest en tgrep doen hetzelfde, maar dan met tijdstippen. Verder bevat dateutils ook strptime, een commandline-versie van de C-functie met dezelfde naam.
Voorbeelden
Met dseq genereer je sequenties van datums, net zoals seq dat doet voor gehele getallen. Bovendien kun je ook weekdagen overslaan, zoals in de volgende code die alle dagen van 1 tot 10 november opsomt, de weekends uitgezonderd:
dseq 2011-11-01 2011-11-10 --skip sat,sun
Dtest werkt zoals test, maar dan met datums. Zo kun je in een shellscript bijvoorbeeld heel eenvoudig testen of we op dit moment na een bepaalde datum zijn:
if dtest now --gt 2011-11-01; then
echo "too late"
fi
En met dadd kun je periodes optellen bij of aftrekken van een datum, zoals dadd 2011-11-01 +3d of dadd 2011-11-01 -1w. Ddiff daarentegen berekent het verschil tussen twee opgegeven data, zoals ddiff 2011-12-27 2012-01-04. En met dgrep kun je lijnen uit een invoerstroom filteren die een datum bevatten die aan bepaalde voorwaarden voldoet, zoals dgrep '<2010-03-01' bestand.txt.
Strptime
Voor tijdstippen gelden dezelfde voorbeelden: vervang gewoon de initiële d in het commando door een t en gebruik tijdstippen in plaats van datums. En tot slot is er zoals gezegd strptime, dat de kracht van de C-functie strptime naar de commandline brengt. Hierdoor kun je datums en tijdstippen in een willekeurig invoerformaat inlezen en omzetten naar het vertrouwde formaat yyyy-mm-ddThh:mm:ss van ISO 8601. Bijvoorbeeld:
strptime -i "%a, %b %d %Y" "Mon, May 01 2000"
Kortom, dateutils ontlast je van heel wat werk om datums en tijdstippen te manipuleren. Je shellscripts worden er bovendien heel wat leesbaarder door.
De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.
