2017-04-12 94 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] ++}'(未測試,固定>> =,你)。 –