[bash] rekenen met date

Pagina: 1
Acties:
  • 284 views sinds 30-01-2008
  • Reageer

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
hallo, hoe moet ik met $date rekenen in bash??

dus

datum= date $m $d

en dan wil ik dat eigenlijk van een andere datum aftrekken en als uitkomst het aantal dagen verschil krijgen..

maja ik ben met die bash tut. bezig geweest maar ik kan nie vinden hoe ik met dates kan rekenen

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 17-02 12:22

zomertje

Barisax knorretje

je wil dus van een vaste datum de huidige datum afhalen??

dan ben ik bang dat je een script zal moeten schrijven dat de datum omzet in een aantal dagen dus 1 januari = 1 en zo verder en dan de boel van elkaar aftrekt

je kan ook awk gebruiken daarbij, dan kun je alle velden uit date halen met $1 enzo.

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Je kunt met het 'date' commando zelf allerlei trucs uithalen.

Als je even een paar minuten hebt zoek ik het ff op....

[Edit: Ja, het is dus inderdaad wel het makkelijkst om er een kort scriptje van te maken. Dit kun je dan op andere plekken hergebruiken.]

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ok, het is me met delphi wel gelukt maja, daar heb ik in linux dus weer niks aan :(

  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Okee, een 'date' tutorial, part 1:

(dit is geldig onder Linux, onder FreeBSD werkt het soms net ff anders, kijk in de manpage van date).

De huidige datum krijg je door gewoon 'date' in te tikken. Je wilt hem in een speciaal formaat (bv 'dag' 'maand') ? Dat gaat zo:

date "+%d %m"

of voor het standaard NL-formaat (dd/mm/yyyy):

date "+%d/%m/%Y"

Voor andere variabelen (ook voor tijd etc.) zie de manpage (man date) of 'date --help'

Je kunt dit met een willekeurige (andere) dag doen door date "+formaat" -d<eenofanderedatum>

Voorbeelden:

De dag-van-de-week gisteren (0=zondag):
date +%w -dyesterday

date "+%d/%m" -d2001/03/10

Geeft 10/03 (je moet de datum dus opgeven in het amerikaanse formaat, blijkbaar)

  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Je kunt het resultaat van een willekeurig commando (bv 'date') toekennen aan een variabele door er omgekeerde enkele quotes om te zetten.

Dus:

$datum1=`date "+%d" -dyesterday`

Nu verder: je wilt twee datums van elkaar aftrekken. Dat gaat het makkelijkst door de tijden intern op te slaan als '(milli)seconden vanaf 1 jan. 1970 00:00 AM':

$datumnu=`date +%s`
$datumeerder=`date +%s -djouwanderedatum`

  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Nu heb je dus twee variabelen, $datumnu en $datumeerder, die je van elkaar wilt aftrekken.

Rekenen kan in bash door dingen tussen vierkante haken te plaatsen:

$verschil=$[$datumnu-$datumeerder]

(misschien hoeven die '$' er niet voor binnen de vierkante haken, probeer maar uit wat werkt)
Nu heb je het verschil in seconden, naar dagen toerekenen is dan natuurlijk een eitje:

$verschil_in_dagen=$[verschil/(60*60*24)]

Natuurlijk kun je deze commando's ook samenvoegen alleen wordt het dan vaak nogal onleesbaar...

[Edit: Leer coden!]

  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Het lijkt nogal een hele mond vol, maar dan tot slot nog even een bruikbaar scriptje:

Sla dit op in een file (bv. dagen_verschil.sh):

#!/bin/bash
echo $[(`date +%s`-`date +%s -d $1`)/(24*60*60)]

Vergeet niet even chmod +x dagen_verschil.sh te doen (dat maakt het geheel uitvoerbaar) en daarna kun je het aanroepen als:

dagen_verschil 2000/10/10

En dan weet je dat 10 oktober vorig jaar momenteel precies 251 dagen geleden is!

'dagen_verschil yesterday' wijst uit dat gisteren - hoe verbazingwekkend - 1 dag geleden is >:)

Natuurlijk kun je dit script ook weer aanroepen in een ander script, gewoon:

$verschil=`dagen_verschil $eendatum`

Let er even op dat je bij het aanroepen vanuit een script het pad goed aangeeft i.e. je moet zeker weten dat het script in de huidige directory staat, dan kun je er './' voor zetten, of je moet het op een vaste plek op je systeem zetten (bv. /usr/local/mijnscripts/dagen_verschil.sh) Dat spaart later een keer irritatie, als je het opstart vanuit een andere dir en je afvraagt waar die foutmeldingen ineens vandaan komen |:(

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 17-02 12:22

zomertje

Barisax knorretje

Das een mooie uitleg, ik zat ook al te denken of dat zou kunnen, maar heb er dus ook niet zo heel veel ervaring mee :)

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ej suuperbedankt he, ik ben mezelf ff een spoedcursus bash aan het geven..

ik moet me lame windhoos-klick collegas een basiscursis linux geven waarop ze zelf verder kunnen borduuren

  • Wilke
  • Registratie: December 2000
  • Laatst online: 14:46
Graag gedaan, succes ermee!

Moet je ook maar eens kijken wat je met tools zoals sed, grep, sort, cut, paste, awk, mail etc. kunt - ik heb bv. wel eens een regel code gezien die, gegeven een invoerfile met daarin de tekst van een boek (in .txt-formaat), zocht op de frequentie waarmee woorden voorkwamen en dit sorteerde op de 25 meest gebruikte woorden (inclusief het aantal). En dit met alleen standaard aanwezige UNIX-tools,

Wie dat in Windows nadoet in, zeg, 250 tekens, vind ik echt knap (en nee, in Perl telt niet, ook al twijfel ik zelfs dan of het in 250 tekens lukt)!
Pagina: 1