按月计算bash中的最小和最大日期

时间:2018-03-20 10:53:44

标签: bash iteration

最简单的方法是,生成一个迭代,从最小和最大日期值输出%Y-%m*字符串,形式为'%Y-%m-%d`?我可以使用

从我的文件系统中获取最小和最大日期
ST_DT=${6-`hdfs dfs -ls  /filepath/key=* | head -2 | tail -1 | cut -d '/' -f6 | cut -d '=' -f2`}
EN_DT=${5-`hdfs dfs -ls /filepath/key=* | tail -1 | cut -d '/' -f6 | cut -d '=' -f2`}

这确实给了我一些例子:

2018-01-01
2018-03-07

我希望能够生成: 2018-01* ... 2018-02* ... 2018-03* ...等

感谢@anubhava的最终答案:

while [[ $(date +%s -d $i) -le $endt ]]; do
   yr=`date --date "$i" +%Y`
   mth=`date --date "$i" +%m`
   echo "$yr-$mth*"
   i=$(date '+%Y-%m-%d' -d "$i +1 month")
done

1 个答案:

答案 0 :(得分:1)

您可以使用gnu date

来使用此shell循环
ST_DT='2018-01-01'
EN_DT='2018-03-07'
endt=$(date '+%s' -d "$EN_DT")
i="$ST_DT"

while [[ $(date +%s -d $i) -le $endt ]]; do
   echo "${i%-*}*"
   i=$(date '+%Y-%m-%d' -d "$i +1 month")
done

2018-01*
2018-02*
2018-03*