Analisi di una data da una stringa

Bash:
Analisi di una data da una stringa

Come fare:

Di per sé, Bash è piuttosto limitato nelle capacità dirette di analisi delle date, spesso si affida a strumenti esterni come date e awk per manipolazioni più sofisticate. Ecco come è possibile analizzare un formato specifico e poi utilizzarlo con il comando date per convertirlo o eseguire operazioni.

Esempio 1: Estrai una stringa di data e convertila in un altro formato.

Supponi di avere una data nel formato yyyy-mm-dd e vuoi convertirla in dd-mm-yyyy.

original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')

echo $formatted_date

Output dell’esempio:

01-04-2023

Questo utilizza il comando date con l’opzione -d per specificare la stringa di data in input, e +%d-%m-%Y per formattare l’output.

Esempio 2: Utilizzo di awk per analizzare una data da una linea di testo strutturata e convertirla.

Supponendo di avere una linea di file di log:

2023-04-01 12:00:00 User logged in

Puoi estrarre e convertire la parte della data usando awk e date.

log_line="2023-04-01 12:00:00 User logged in"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")

echo $formatted_date

Output dell’esempio:

Sabato, Aprile 01, 2023

Questo esempio utilizza awk per dividere la linea del log ed estrarre la parte della data ($1 rappresenta il primo campo delimitato da spazi), e poi si usa date per riformattarla.

Utilizzo di strumenti di terze parti

Per analisi più complesse o quando si ha a che fare con una vasta varietà di formati di date, gli strumenti di terze parti come dateutils possono essere molto utili.

Esempio con dateutils:

Supponendo di avere una stringa di data in un formato non standard, ad esempio, April 01, 2023.

original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)

echo $formatted_date

Output dell’esempio:

2023-04-01

Questo comando utilizza dateconv di dateutils, specificando il formato di input con -i e il formato di output desiderato con -f. dateutils supporta un vasto intervallo di formati di date e orari, rendendolo molto versatile per le attività di analisi delle date negli script Bash.