Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Print de laatste zaterdag van de maand  (gelezen 1867 keer)

Offline Scormen

  • Lid
    • LinuxOntdekt.Be
  • Steunpunt: Nee
Print de laatste zaterdag van de maand
« Gepost op: 2009/06/07, 12:39:23 »
Hoi,

In Bash wil ik de laatste zaterdag van de maand weergeven.
Deze maand (juni 2009) zou het "27" moeten printen.

Ik heb (de week start op maandag):
saveFullMonthOn='6'
lastXDay=`cal | awk {'print $saveFullMonthOn'} | xargs | /usr/bin/cut -d" " -f5`

Maar dit print "We" in plaats van "27".

Om het zo in de terminal te testen werkt het zo wel:
cal | awk {'print $6'} | xargs | /usr/bin/cut -d" " -f5
Ik veronderstel dat ik in de knoei zit met de quotes.
Enig idee?

Dank je.
Ubuntu gebruiker #18341 | Linux gebruiker #456955
· Mijn persoonlijke Linux blog

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #1 Gepost op: 2009/06/07, 13:05:47 »
saveFullMonthOn='$6'
lastXDay=`cal | awk {"print $saveFullMonthOn"} | xargs | /usr/bin/cut -d" " -f5`
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Scormen

  • Lid
    • LinuxOntdekt.Be
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #2 Gepost op: 2009/06/07, 13:41:41 »
Aha, ziedet, de quotes :) merci SeySayux!

Ik heb er nu nog van gemaakt:
saveFullMonthOn='6'
lastXDay=`cal | awk {"print "'$'"$saveFullMonthOn"} | xargs | /usr/bin/cut -d" " -f5`

Heb je toevallig een duidelijke handleiding wanneer welke quotes gebruiken?
Ubuntu gebruiker #18341 | Linux gebruiker #456955
· Mijn persoonlijke Linux blog

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #3 Gepost op: 2009/06/07, 14:28:06 »
In plaats van cal zou je ook gewoon date kunnen gebruiken:
date +%d geeft vandaag 07
date -d "+1 week" +%d geeft 14
date -d "next Sat" +%d geeft 13

Als het de laatste zaterdag van de maand is, is de datum van volgende week kleiner dan of gelijk aan 7.
Zo zou je ook een test kunnen maken.

Edit: dit is meer een test om te bepalen of een bepaalde dag de laatste weekdag van de maand is.
« Laatst bewerkt op: 2009/06/07, 14:45:19 door Johan van Dijk »

Offline track

  • Lid
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #4 Gepost op: 2009/06/07, 14:29:09 »
Hoi Scormen,

jouw scriptje kan nog een beetje korter als je de mogelijkheden van awk uitput: #! /bin/bash

cal | awk "{ if(\$6!=\"\") x=\$6; } END { print x }"
#         |     |    | |     |                     |aanhalingsteken vd bash
#         |     |    | |     |afscherming voor [$] (tegen de bash)
#         |     |    |.|afscherming voor ["] (tegen de bash)
#         |     |afscherming voor [$] (opdat de bash het niet verwerkt)
#         |aanhalingsteken voor het bash-commando


x="testwoord"

echo  $x      $x    # zonder quotes: spaties worden niet beschermd
echo '$x      $x'   # single quotes: ook variabelen worden beschermd (dus niet uitgevoerd)
echo "$x      $x"   # double quotes: variabelen worden uitgevoerd en spaties beschermd
Ik heb er ook iets uitgelegd over aanhalingstekens en afscherming van tekens.

Vriendelijke groet,

track
« Laatst bewerkt op: 2009/06/07, 14:55:49 door track »

Offline Scormen

  • Lid
    • LinuxOntdekt.Be
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #5 Gepost op: 2009/06/07, 14:58:50 »
Daar zit iets in ja, Johan.

Track, bedankt voor de uitleg.
Ik moet echter gebruik maken van de variable     saveFullMonthOn='6'
Nu heb ik het aangepast naar:
cal | awk "{ if(\$6!=\"\") x=\$$saveFullMonthOn; } END { print x }"
Klopt dit nog? Het werkt althans wel.
Ubuntu gebruiker #18341 | Linux gebruiker #456955
· Mijn persoonlijke Linux blog

Offline track

  • Lid
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #6 Gepost op: 2009/06/07, 15:06:35 »
Nee, bij de "if" moet je ook jouw constructie inzetten:
cal | awk "{ if(\$$saveFullMonthOn!=\"\") x=\$$saveFullMonthOn; } END { print x }"(anders heb je toevallige resultaten ivm de half lege laatste week)

Dit is trouwens ook een heel mooi voorbeeld voor de afscherming:  het eerste [$] wordt telkens wél,
het tweede niet afgeschermd (en dus "$saveFullMonthOn" voor awk opgelost naar "6").

track

Offline Scormen

  • Lid
    • LinuxOntdekt.Be
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #7 Gepost op: 2009/06/07, 15:20:44 »
Programmeren is nog altijd niet men sterkste kant, dank je :)
Ik begrijp het als ik het zie, maar om het in een andere regel toe te passen, daar heb ik het nog altijd moeilijk mee.

Voor zover ik het begrijp heeft dit geen invloed op hoeveel zaterdagen er in een maand vallen? Bij mijn eerste post was dat nog een probleem. Ik heb een gelijkaardig onderwerp lopen op: http://ubuntuforums.org/showthread.php?p=7415037
Ubuntu gebruiker #18341 | Linux gebruiker #456955
· Mijn persoonlijke Linux blog

Offline track

  • Lid
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #8 Gepost op: 2009/06/07, 15:31:03 »
Dat maakt niet uit. Je ziet het zelf als je het awk-verhaal normaal schrijft:

Citaat
{
   if( $$saveFullMonthOn != "" )   x= $$saveFullMonthOn ;
    }

END { print x }

Als de desbetreffende kolom niet leeg is (zoals soms in de laatste week van de maand) overschrijft hij telkens de variabele [x].
Het maakt dus niet uit hoe velen ervoor zin, hij pakt maar de laatste (en print ze).

track
« Laatst bewerkt op: 2009/06/07, 15:36:20 door track »

Offline joop13

  • Lid
  • Steunpunt: Nee
Re: Print de laatste zaterdag van de maand
« Reactie #9 Gepost op: 2009/06/07, 19:17:16 »
Een regel om aan vast te houden:
Zorg ervoor dat je quotes en andere tekens zo verdeeld dat de computer niet iets anders kan uitvoeren dan jij wilt.

In de foute voorbeelden neemt de computer aan dat er tekst is terwijl jij dat niet bedoeld hebt! Na een bepaalde quote neemt de computer iets aan tot de volgende zelfde quote. En jij had dat niet bedoeld, maar je bedoelde dat hij het volgende quotenpaar zou moeten nemen. En zo slim zijn computers nu een keer niet dat ze begrijpen wat jij bedoelt hebt!! XD
Door gebrek aan visie gaat het volk ten onder, een keur van raadgevers brengt het tot bloei.

Twee laptops 16.04 Ubuntu, 1 laptop Linux Mint,