在AWK中生成两个日期范围之间的日期

时间:2014-05-06 12:38:47

标签: date awk intervals

我需要在日期间隔之间创建一个天数列表。 例如,从2001-01-01到2009-12-31:

2001-01-01
2001-01-02
2001-01-03
..
2009-12-29
2009-12-30
2009-12-31

我知道怎么做但也许有人已经制作了一个剧本? 如果没有,我会制作这样一个剧本并上传,以便其他人在需要时不会浪费时间。

1 个答案:

答案 0 :(得分:1)

我不知道来自GnuWin32的awk,但是如果函数" mktime"和" strftime"可用,您可以尝试以下代码:

BEGIN {
  START_DATE="2001-02-01"
  END_DATE="2001-03-05"

  S2=START_DATE
  gsub("-"," ",S2)

  T=mktime(S2 " 01 00 00")
  if   (T<0)
     printf("%s is invalid.\n",START_DATE) >> "/dev/stderr"
  else
  {
     for(S=START_DATE; END_DATE>S ;T+=86440) print S=strftime("%F",T)
  }
}

关键是将开始日期转换为一个数字,表示自纪元以来的秒数,加上86400秒(一天或24 x 60 x 60)并转换回ISO日期格式。

经过一些试验后,我意识到mktime()函数承认错误的日期是好的(例如,2000-14-03)。

祝你好运