Розбір дати з рядка

Bash:
Розбір дати з рядка

Як це робити:

Сам Bash цілковито обмежений у прямому аналізі дат, часто покладаючись на зовнішні інструменти, такі як date та awk, для більш складної маніпуляції. Ось як ви можете проаналізувати конкретний формат, а потім використовувати його з командою date, щоб перетворити його або виконати операції.

Приклад 1: Витягти рядок дати та конвертувати його в інший формат.

Припустімо, у вас є дата у форматі yyyy-mm-dd і ви хочете конвертувати її в dd-mm-yyyy.

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

echo $formatted_date

Приклад виводу:

01-04-2023

Це використовує команду date з опцією -d для вказівки вхідного рядка дати та +%d-%m-%Y для форматування виводу.

Приклад 2: Використання awk для аналізу дати зі структурованої текстової лінії та її конвертації.

Припустимо, у вас є рядок файлу лога:

2023-04-01 12:00:00 Користувач увійшов у систему

Ви можете витягти та конвертувати частину дати, використовуючи awk і date.

log_line="2023-04-01 12:00:00 Користувач увійшов у систему"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")

echo $formatted_date

Приклад виводу:

Субота, Квітень 01, 2023

У цьому прикладі використовується awk для розбиття рядка логу та вилучення частини дати ($1 представляє перше поле, обмежене пробілом), а потім використовується date для його переформатування.

Використання інструментів сторонніх розробників

Для більш складного аналізу або при роботі з широким різноманіттям форматів дат інструменти сторонніх розробників, такі як dateutils, можуть бути дуже корисними.

Приклад з dateutils:

Припустімо, у вас є рядок дати в нестандартному форматі, наприклад, Квітень 01, 2023.

original_date="Квітень 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)

echo $formatted_date

Приклад виводу:

2023-04-01

Ця команда використовує dateconv з dateutils, вказуючи вхідний формат за допомогою -i і бажаний вихідний формат за допомогою -f. dateutils підтримує величезний діапазон форматів дати та часу, роблячи його дуже гнучким для завдань аналізу дат у скриптах Bash.