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.