Вычисление даты по количеству месяцев, прошедших в bash

#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() .