使用Shell脚本从字符串YYYYQ1中提取季度日期

时间:2019-01-25 07:27:16

标签: shell date

我需要从下面的字符串格式中提取开始日期和结束日期,如下所示。

col1
2018Q1
2018_Q2
2018-Q3

所以我需要获得如下输出

col1,start_dt,end_dt
2018Q1, 2018-01-01 00:00:00, 2018-03-31 00:00:00
2018_Q2, 2018-04-01 00:00:00, 2018-06-30 00:00:00
2018-Q3, 2018-07-01 00:00:00, 2018-09-30 00:00:00

我已经使用搜索模式来拆分YYYY和每季度信息。那么如何传递这些值并获得上述的start_dt和end_dt。

1 个答案:

答案 0 :(得分:0)

您可以使用case进行匹配:

#!/bin/sh

set -eu

(
  read -r header

  printf '%s,start_dt,end_dt\n' "${header}"

  while read -r date
  do
    case "${date}"
    in
      *Q1)
        beg=01-01
        end=03-31
        ;;

      *Q2)
        beg=04-01
        end=06-30
        ;;

      *Q3)
        beg=07-01
        end=09-30
        ;;

      *Q4)
        beg=10-01
        end=12-31
        ;;

      *)
        printf 'Bad format %s' "${date}" >&2
        exit2
    esac

    year="$(printf '%s' "${date}" | grep -o '^[[:digit:]]\+')"
    printf '%s, %d-%s 00:00:00, %d-%s 00:00:00\n' \
           "${date}" \
           "${year}" \
           "${beg}" \
           "${year}" \
           "${end}"
  done
) < file