GNU/Linux >> Linux Esercitazione >  >> Linux

Come potrebbe essere generata una sequenza di date casuali, dato l'intervallo di un anno?

Ciò che serve qui è un comando che generi sei date in un intervallo di anni (dal 1987 al 2017). Ad esempio:

12/10/1987
30/04/1998
22/02/2014
17/08/2017
19/07/2011
14/05/2004

Come si potrebbe fare, con sed , gawk , ecc?

Risposta accettata:

Puoi trasformare il problema nella generazione di un numero casuale tra un numero che rappresenta la prima data possibile e un numero che rappresenta l'ultima data possibile (in realtà quella subito dopo l'ultima possibile), in formato unix epoch. Tutto il resto è gestito da conversioni di data standard. gawk ha una migliore risoluzione dei numeri casuali rispetto a bash (float vs intero a 15 bit), quindi userò gawk . Nota che il rand() risultato N è un float tale che 0 <=N <1, ecco perché il limite più alto è aumentato al di sotto, è un limite che non può essere lanciato. C'è un terzo parametro facoltativo per il numero di risultati.

#!/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)
    }
}   

Ad esempio:

./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. Come aumentare il limite del numero di file aperti in Linux

  2. Come contare il numero di file e sottodirectory all'interno di una determinata directory

  3. Come installare pandom:un vero generatore di numeri casuali per Linux

  4. Come generare una password casuale in Linux usando /dev/random

  5. Numero di file contenenti una determinata stringa?

Come controllare la cronologia dei comandi di Linux in base alle date

Come controllare il numero di versione e il nome in codice di Linux Mint

Come eseguire il ping di un numero di porta in Linux

Come eseguire il ping di un numero di porta specifico

Come creare un grafico grafico di una sequenza di numeri dall'input standard?

Procedura:Introduzione alla programmazione – Programmazione orientata agli oggetti