GNU/Linux >> Znalost Linux >  >> Linux

Jak by mohla být vygenerována sekvence náhodných dat s daným ročním intervalem?

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
  1. Jak zvýšit limit počtu otevřených souborů v Linuxu

  2. Jak nainstalovat pandom:skutečný generátor náhodných čísel pro Linux

  3. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  1. Počet souborů obsahujících daný řetězec?

  2. Jak vytisknout číslo v sestavě NASM?

  3. linux:jak spustit příkaz v daném adresáři

  1. Bash printf - Jak tisknout proměnnou v Bash

  2. Jak spočítat počet souborů a podadresářů v daném adresáři

  3. Jak počítat výskyty slov v textovém souboru