Nieuws:

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

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

Offline Scormen

  • Lid
    • LinuxOntdekt.Be
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

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
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
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
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
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
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
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
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
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,

Offline TKikkert

  • Lid
    • serendipity for the masses
Re: Print de laatste zaterdag van de maand
« Reactie #10 Gepost op: 2020/09/22, 17:37:01 »
cal to the rescue!!

als oneliner, de laatste zaterdag van de huidige maand:
cal -h | cut -d" " -f7 | sort -n | tail -1
voor andere maanden:
cal -h mm jjjj | cut -d" " -f7 | sort -n | sort -n | tail -1
« Laatst bewerkt op: 2020/09/22, 20:21:19 door TKikkert »

Re: Print de laatste zaterdag van de maand
« Reactie #11 Gepost op: 2020/09/23, 11:02:06 »
Hallo, je reageert op een draad uit 2009!

als oneliner, de laatste zaterdag van de huidige maand:
cal -h | cut -d" " -f7 | sort -n | tail -1
geeft: Usage: cal [general options] [-jy] [[month] year]

voor andere maanden:
cal -h mm jjjj | cut -d" " -f7 | sort -n | sort -n | tail -1
ditto. Werkt dus niet...

Offline Bloom

  • Lid
Re: Print de laatste zaterdag van de maand
« Reactie #12 Gepost op: 2020/09/23, 12:30:31 »
Die optie '-h' dient voor het uitzetten van het doen oplichten van vandaag in de kalender, maar als je uitvoerredirectie gebruikt wordt dat sowieso onderdrukt. Bovendien schijnt de cal in Ubuntu en Debian die optie -h niet te ondersteunen.
Doe dus gewoon:
cal | cut -d" " -f7 | sort -n | tail -1
en dan werkt het wel. Voor deze maand geeft hij dus correct 26.


Re: Print de laatste zaterdag van de maand
« Reactie #13 Gepost op: 2020/09/24, 14:29:27 »
Inderdaad Bloom, de jouwe werkt wel (op mijn Xubuntu): 26.

Offline TopGear

  • Forumteam
Re: Print de laatste zaterdag van de maand
« Reactie #14 Gepost op: 2020/09/29, 09:23:01 »
Ho eens even. Dit is een topic uit 2009! Dit topic is al bijna klaar met de basisschool. Laten we het dan ook met rust houden.