笔者在工作中需要动态传入日期参数执行脚本,但是将多个日期一个一个传入会降低执行效率,故根据一定时间段将日期聚合划分成区间段可以减少传参执行的次数。此例子以7天为范围聚合日期到区间段,可以根据实际需要改进。
案例中的日期文件date.txt中的日期如下:
2018-01-02
2018-07-01
2018-07-11
2018-07-15
2018-07-17
2018-07-13
2017-12-30
2018-05-02
2018-05-06
2017-11-02
shell脚本cut_date.sh如下:
#!/bin/bash
# 倒序日期文件中的日期
myline=`sort -r $1`
# 取昨日为区间段最后一天
end_date=`date -d "-1 day" "+%Y%m%d"`
# 取昨日为区间段第一天
last_begin_date=`date -d "-1 day" "+%Y%m%d"`
for i in ${myline[0]}
do
# 循环取出日期进行比较
begin_date=`date -d $i "+%Y%m%d"`
# 若该日期在区间段往前扩展7天内则将该日期作为区间段开始日期
if [[ $begin_date -gt `date -d "$last_begin_date -7 day" "+%Y%m%d"` ]];then
last_begin_date=$begin_date
else
# 若该日期在区间段往前扩展7天外则取出此区间,并将该日期作为新区间段的开始和结束日期再循环比较
echo "[$las