#date #awk
#Дата #awk
Вопрос:
У меня есть список с двумя элементами, title
и months
.
MS4.2.8|48, 60
MS4.2.9|60
MS4.2.10|52
MS4.3.1|3
MS4.3.2|12
MS4.3.3|9
MS4.3.4|12
MS4.3.5|24,36,48,60
MS4.3.6|24,36,48,60
MS4.3.7|24
MS4.3.8|18
Начальный период — «2021-09-01».
Мне нужен список с title
датой и рассчитанный по количеству месяцев, прошедших с момента начала периода. Месячный период может быть установлен несколько раз, для каждого месячного периода должна быть новая строка.
Например:
MS4.2.8|2025-08-01
MS4.2.8|2026-08-01
MS4.2.9|2026-08-01
MS4.2.10|2026-01-01
MS4.3.1|2021-11-01
MS4.3.2|2022-08-01
MS4.3.3|2022-05-01
.
.
.
Комментарии:
1.
How...?
Прочитайте одну строку. Разделить на|
. Возьмите вторую часть. Разделить на,
, игнорировать пробелы. Для каждого элемента добавьте к2021-09-01
количеству месяцев и преобразуйте вyyyy-mm-dd
формат. Затем для каждого результата отобразите первую часть от|
разделения, затем отобразите|
символ, а затем результат.2. хорошо — я перефразировал это.
Ответ №1:
Это должно сделать это:
awk' BEGIN{OFS=FS="|"}
{n=split($2,a,",");
for(i=1;i<=n; i) print $1,strftime("%F",mktime("2021 " (08 a[i]) " 01 0 0 0"))
}' file
метод использует расширения GNU awk mktime
и strftime
.
Комментарии:
1. Вы должны упомянуть, что для этого требуется GNU awk для mktime() и strftime() .