Yang diperlukan di sini adalah perintah yang menghasilkan enam tanggal dengan rentang tahun (1987 hingga 2017). Misalnya:
12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004
Bagaimana itu bisa dilakukan, dengan sed
, gawk
, dll?
Jawaban yang Diterima:
Anda dapat mengubah masalah menjadi menghasilkan angka acak antara angka yang mewakili tanggal pertama yang mungkin dan angka yang mewakili tanggal terakhir yang mungkin (sebenarnya yang tepat setelah kemungkinan terakhir), dalam format zaman unix. Segala sesuatu yang lain ditangani oleh konversi tanggal standar. gawk
memiliki resolusi angka acak yang lebih baik daripada bash
(float vs 15 bit integer), jadi saya akan menggunakan gawk
. Perhatikan bahwa rand()
hasil N adalah float sedemikian rupa sehingga 0 <=N <1, makanya batas yang lebih tinggi dinaikkan ke bawah, itu adalah batas yang tidak dapat digulirkan. Ada parameter ke-3 opsional untuk jumlah hasil.
#!/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)
}
}
Misalnya:
./randomdate.gawk 1987 2017 6
26/04/1992
28/04/2010
21/04/2005
17/02/2010
06/10/2016
04/04/1998