Lo que se necesita aquí es un comando que genere seis fechas dado un rango de años (1987 a 2017). Por ejemplo:
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Cómo podría hacerse, con sed
, gawk
, etc?
Respuesta aceptada:
Puede convertir el problema en generar un número aleatorio entre un número que representa la primera fecha posible y un número que representa la última fecha posible (en realidad, la que sigue a la última posible), en formato de época de Unix. Todo lo demás se maneja mediante conversiones de fecha estándar. gawk
tiene una mejor resolución de números aleatorios que bash
(flotante vs entero de 15 bits), así que usaré gawk
. Tenga en cuenta que rand()
resultado N es un flotante tal que 0 <=N <1, por eso el límite superior se incrementa por debajo, es un límite que no se puede rodar. Hay un tercer parámetro opcional para el número de resultados.
#!/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)
}
}
Por ejemplo:
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998