Zde je zapotřebí příkaz, který generuje šest dat s rozsahem let (1987 až 2017). Například:
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Jak to lze provést pomocí sed
, gawk
, atd.?
Přijatá odpověď:
Problém můžete změnit na generování náhodného čísla mezi číslem představujícím první možné datum a číslem představujícím poslední možné datum (ve skutečnosti hned po posledním možném), ve formátu unixové epochy. Vše ostatní je řešeno standardními převody data. gawk
má lepší rozlišení náhodných čísel než bash
(plovoucí vs 15bitové celé číslo), takže budu používat gawk
. Všimněte si, že rand()
výsledek N je takové plovoucí, že 0 <=N <1, proto je vyšší limit zvýšen pod, je to limit, který nelze hodit. Existuje volitelný 3. parametr pro počet výsledků.
#!/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)
}
}
Například:
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998
Linux – najít ovladač pro Linux pro sluchátka ve stromu jádra?
Jak přesměrovat informace o chybě spustitelného programu C na Stdout? (mac Os X)?