2017-04-12 95 views
0

我想计算时间段之间的记录数。使用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=19560101; i<=20171231; i=i+10000){ 
    if(doa >=i && doa <= i+1130){year${cnt}+=1} 
    } 

    print year${cnt} 
    cnt+=1 
}' 

请帮忙。

+1

预期的输出? –

回答

0

像这个?:

$ 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

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

输出

19560101 to 19561231 2 
... 
+0

非常感谢。但如果这不是一个日历年,那么如何继续?假设如果期间是19560401到19570331,那么... – var

+0

@var'{if(substr($ i,5,4)> =“0401”)a [substr($ i,1,4)] ++ ; else [substr($ i,1,4)-1] ++}'(未测试,固定>> =,你)。 –