bash random tussen tijden

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • makooy
  • Registratie: Januari 2011
  • Laatst online: 16:11
Ik probeer ik bash een random tijd te genereren en op te slaan in een txt bestand.
Deze tijd moet uit komen tussen 00.10 en 07.00.

ik ben al bezig geweest met een dubbele shuf:
shuf -i 00-06 -n 1
shuf -i 00-59 -n 1

Probleem is alleen dat de cijfers die hier uit komen en geen dubbele cijfers zijn geen 0 er voor krijgen
dus als de eerste shuf 6 wordt en de 2de 1 wordt het geen 0601 maar 61.

Iemand enig idee hoe ik dit werkend krijg?
Liefste geen niet-standaard linux tools.

TWEAKERS EREDIVISIE VOETBALPOULE!

Alle reacties


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:22
Denk dat je moet zoeken op concat: https://stackoverflow.com...-string-variables-in-bash dan kom je een aardig eindje.

Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Met de shufs die jij aanroept kun je ook 07:59 krijgen, wat volgens mij buiten je tijdsrange valt, maar goed, op je vraag:

Voor uren moet altijd een nul, dus dat is gewoon string concatination. Voor de minuten moet het alleen gebeuren als het een getal tussen 0 en 10 is, of misschien handiger, als de lengte van het getal 1 is. Dat kan het commando wc prima tellen. Vervolgens kun je dit allemaal aan elkaar concatten en voila, je hebt een scriptje om een random tijd te genereren.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Is een shuf met 0-420 niet handiger?

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • makooy
  • Registratie: Januari 2011
  • Laatst online: 16:11
DJMaze schreef op zondag 13 oktober 2019 @ 10:05:
Is een shuf met 0-420 niet handiger?
Dat gaat dus niet omdat het script wat de tijd oppikt niet deelt door 60.
Die moet het bijvoorbeeld als 0620 aangeleverd krijgen.

TWEAKERS EREDIVISIE VOETBALPOULE!


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Je kan de output van shuf ook nog voeden aan printf en die de leading zero laten toevoegen.

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Nu online
bash printf ondersteunt ook strftime formatting. Dat kun je combineren met een enkele shuf. Dat random getal is dan een aantal seconden sinds de Unix epoch. Je kunt het nog omrekenen naar minuten en als %H%M formatten, of je past de format string daarop aan.
Bash:
1
printf '%(%M%S)T\n' $(shuf -i 10-420 -n 1)

Acties:
  • 0 Henk 'm!

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Raynman schreef op zondag 13 oktober 2019 @ 12:39:
bash printf ondersteunt ook strftime formatting. Dat kun je combineren met een enkele shuf. Dat random getal is dan een aantal seconden sinds de Unix epoch. Je kunt het nog omrekenen naar minuten en als %H%M formatten, of je past de format string daarop aan.
Bash:
1
printf '%(%M%S)T\n' $(shuf -i 10-420 -n 1)
Of volledig in Bash script:
Bash:
1
printf '%(%M%S)T\n' $((RANDOM % 411 + 10))

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
TerrorSource schreef op zondag 13 oktober 2019 @ 10:28:
Dat gaat dus niet omdat het script wat de tijd oppikt niet deelt door 60.
Die moet het bijvoorbeeld als 0620 aangeleverd krijgen.
Dat kan dus wel. Mensen geven al aan hoe.
En je kan ook zelf rekenen met de uitkomst.

time % 60
time / 60

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:22
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
HR=$(shuf -i 00-07 -n 1)
MN=$(shuf -i 00-59 -n 1)
SPLITTER=":"

if [ $HR -eq 7 ]
        then MN=0
fi

if [ $(echo -n $MN|wc -c) -eq 1 ]
        then MN="0${MN}"
fi

TIMESTR="0${HR}${SPLITTER}${MN}"

echo $TIMESTR

Even maar de bash "skills" afgeklopt....

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@ge-flopt daar zijn de gegenereerde waardes ieder geval niet uniform verdeeld. 7:00 zal veel vaker voorkomen dan 6:59. Een random waarde tussen de 0 en 410 genereren en die bij 0:10 optellen is een veel betere oplossing.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:22
@Woy, klopt, ik heb alleen voorgebreid op de 2 regels die de TS al had. Het is geen mooie oplossing, maar als je bv de uren aanpast naar 6 in de eerste regel, dan is de kans dat alles eerlijker verdeeld wordt beter.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@ge-flopt het zou dan wel beter zijn, maar nog steeds niet goed, alle waardes van 0:10 to 0:59 hebben dan nog steeds ~20% meer kans om te gekozen te worden.

Het is gewoon beter om niet meerdere random waardes op deze manier te combineren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:22
Klopt, je hebt gelijk! :D
Maar nu heeft de TS iets om op voort te borduren. ;)

[ Voor 50% gewijzigd door ge-flopt op 14-10-2019 14:33 ]

Pagina: 1