Was hier benötigt wird, ist ein Befehl, der sechs Datumsangaben für eine Reihe von Jahren (1987 bis 2017) generiert. Zum Beispiel:
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Wie es gehen könnte, mit sed
, gawk
, etc?
Akzeptierte Antwort:
Sie können das Problem dahingehend umwandeln, dass Sie eine Zufallszahl zwischen einer Zahl, die das erste mögliche Datum darstellt, und einer Zahl, die das letztmögliche Datum darstellt (eigentlich diejenige direkt nach dem letztmöglichen), im Unix-Epochenformat generieren. Alles andere wird von Standard-Datumskonvertierungen erledigt. gawk
hat eine bessere Zufallszahlenauflösung als bash
(Float vs 15 Bit Integer), also verwende ich gawk
. Beachten Sie, dass rand()
Ergebnis N ist ein Float, so dass 0 <=N <1, deshalb wird das obere Limit nach unten erhöht, es ist ein Limit, das nicht gewürfelt werden kann. Es gibt einen optionalen 3. Parameter für die Anzahl der Ergebnisse.
#!/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)
}
}
Zum Beispiel:
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998