Ciò che serve qui è un comando che generi sei date in un intervallo di anni (dal 1987 al 2017). Ad esempio:
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Come si potrebbe fare, con sed
, gawk
, ecc?
Risposta accettata:
Puoi trasformare il problema nella generazione di un numero casuale tra un numero che rappresenta la prima data possibile e un numero che rappresenta l'ultima data possibile (in realtà quella subito dopo l'ultima possibile), in formato unix epoch. Tutto il resto è gestito da conversioni di data standard. gawk
ha una migliore risoluzione dei numeri casuali rispetto a bash
(float vs intero a 15 bit), quindi userò gawk
. Nota che il rand()
risultato N è un float tale che 0 <=N <1, ecco perché il limite più alto è aumentato al di sotto, è un limite che non può essere lanciato. C'è un terzo parametro facoltativo per il numero di risultati.
#!/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)
}
}
Ad esempio:
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998