Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

bash random tussen tijden

Pagina: 1
Acties:

Vraag


  • TerrorSource
  • Registratie: januari 2011
  • Laatst online: 00:31
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 V&A Ads
oa. Raspberry Pi 3b + 7Inch Touch Screen & Domotica

Alle reacties


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

  • Gropah
  • Registratie: december 2007
  • Laatst online: 01:13

Gropah

Moderator Spielerij

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.

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

Maak je niet druk, dat doet de compressor maar


  • TerrorSource
  • Registratie: januari 2011
  • Laatst online: 00:31
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 V&A Ads
oa. Raspberry Pi 3b + 7Inch Touch Screen & Domotica


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

PV Output


  • Raynman
  • Registratie: augustus 2004
  • Laatst online: 25-10 19:37
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)


  • 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/


  • 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


  • ge-flopt
  • Registratie: februari 2001
  • Laatst online: 23:42

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

  • 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.”


  • ge-flopt
  • Registratie: februari 2001
  • Laatst online: 23:42
@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.

  • 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.”


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

ge-flopt wijzigde deze reactie 14-10-2019 14:33 (50%)

Pagina: 1


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Smartphones

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True