Ce qu'il faut ici, c'est une commande qui génère six dates sur une plage d'années (1987 à 2017). Par exemple :
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Comment cela pourrait être fait, avec sed
, gawk
, etc ?
Réponse acceptée :
Vous pouvez transformer le problème en générant un nombre aléatoire entre un nombre représentant la première date possible et un nombre représentant la dernière date possible (en fait celle juste après la dernière possible), au format d'époque Unix. Tout le reste est géré par des conversions de date standard. gawk
a une meilleure résolution de nombres aléatoires que bash
(float vs entier 15 bits), donc j'utiliserai gawk
. Notez que le rand()
le résultat N est un flottant tel que 0 <=N <1, c'est pourquoi la limite supérieure est augmentée en dessous, c'est une limite qui ne peut pas être roulée. Il y a un 3ème paramètre facultatif pour le nombre de résultats.
#!/usr/bin/gawk -f
BEGIN {
first=mktime(ARGV[1] " 01 01 00 00 00")
last=mktime(ARGV[2]+1 " 01 01 00 00 00")
if (ARGC == 4) { num=ARGV[3] } else { num=1 }
ARGC=1
range=last-first
srand(sprintf("%d%06d", systime(), PROCINFO["pid"]))
for (i=1; i <= num; i++) {
print strftime("%d/%m/%Y", range*rand()+first)
}
}
Par exemple :
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998