使用awk自动递增变量

使用awk自动递增变量,awk,Awk,我正在尝试计算时间段之间的记录数 doa 19560227 19560429 19571001 19571201 19580301 . . . . 20170327 20170401 时间段介于日历年和日历年之间 19560101 to 19561231 19570101 to 19571231 . . . 20170101 to 20171231 每当日期发生变化时,应增加变量。 我尝试了以下代码,但没有得到结果 awk '{ doa=$1 cnt=1956 for (i=1

我正在尝试计算时间段之间的记录数

doa
19560227
19560429
19571001
19571201
19580301
.
.
.
.
20170327
20170401
时间段介于日历年和日历年之间

19560101 to 19561231
19570101 to 19571231
.
.
.
20170101 to 20171231
每当日期发生变化时,应增加变量。 我尝试了以下代码,但没有得到结果

awk '{
  doa=$1
  cnt=1956

  for (i=19560101; i<=20171231; i=i+10000){
    if(doa >=i && doa <= i+1130){year${cnt}+=1}
  }

  print year${cnt}
  cnt+=1
}'
awk'{
doa=1美元
cnt=1956
对于(i=19560101;i=i&&doa像这样?:

$ awk '{a[substr($i,1,4)]++}END{for(i in a) print i, a[i]}' file
1956 2
doa 1
. 4
1957 2
1958 1
2017 2
由于范围是日历年,计算年份还不够吗?如果不够,请参阅下面我的评论

如果要输出整个范围,请在
打印中执行:

print i "0101 to " i "1231", a[i]
输出

19560101 to 19561231 2
...

预期产出?非常感谢。但是如果这不是一个日历年,那么如何进行呢?假设这段时间是19560401年到19570331年,并且在那里……@var
{if(substr($i,5,4)>=“0401”)a[substr($i,1,4)]++;否则a[substr($i,1,4)-1]+}
(未测试,固定到>=,千)。