I have a table that looks like this, but for a whole year:
Hourly weather history for XXX 7 Jun
0:00 Clear weather 28
1:00 Clear weather 23
2:00 Clear weather 21
3:00 Clear weather 22
4:00 Clear weather 22
5:00 Clear weather 22
6:00 Clear weather 23
7:00 Clear weather 23
9:00 Clear weather 28
10:00 Clear weather 30
11:00 Clear weather 32
12:00 Clear weather 33
14:00 Clear weather 35
15:00 Clear weather 34
16:00 Clear weather 34
17:00 Clear weather 34
18:00 Clear weather 32
19:00 Clear weather 33
20:00 Clear weather 31
21:00 Clear weather 30
22:00 Clear weather 30
23:00 Clear weather 28
Hourly weather history for XXX 8 Jun
0:00 Clear weather 29
1:00 Clear weather 28
2:00 Clear weather 27
6:00 Clear weather 25
8:00 Clear weather 29
9:00 Clear weather 29
10:00 Clear weather 32
11:00 Clear weather 34
12:00 Clear weather 35
13:00 Clear weather 35
15:00 Clear weather 37
17:00 Clear weather 36
18:00 Clear weather 34
19:00 Clear weather 32
20:00 Clear weather 31
21:00 Clear weather 30
22:00 Clear weather 30
23:00 Clear weather 30
If you look carefully, you'll see the first day has all 24 hours accounted for, but the 2nd day is missing 0300-0500, 0700, 1400 and 1600
I'm trying to loop through the list and check if the time on line N+1 is equal to TIME +1. If not, insert that line (just the time)
So far I have this:
#! /bin/awk -f
{
if ($1 ~ /Hourly/)
{
print "" #print a blank line for ease of finding new day
tmp[1]="" #reset variables. Necessary?
lineONE[1]="" #
}
else
{
split($1,lineOne,":") #split the time so that you're just using the hour portion
if (lineOne[1] <= 23) #Loop through until all 24 hours are tested
{
getline line2
split(line2, tmp, ":")
if (tmp[1]== lineOne[1]+1)
{
print $0
print line2
}
else
{
print $0
print lineOne[1]+1 ":00\t!!!!inserted by program!!!!"
}
}
}
}
Which works if there is only one missing hour, and there are 2 consecutive hours for the next set of hours. I can't figure out how to reset so that (getline line2) becomes lineOne. Any help appreciated.
Currently the output is:
paulyester$ awk -f awktest testhrfile.txt
kevin$ awk -f awktest testhrfile.txt
0:00 Clear weather 28
1:00 Clear weather 23
2:00 Clear weather 21
3:00 Clear weather 22
4:00 Clear weather 22
5:00 Clear weather 22
6:00 Clear weather 23
7:00 Clear weather 23
9:00 Clear weather 28
10:00 Clear weather 30
11:00 Clear weather 32
12:00 Clear weather 33
14:00 Clear weather 35
15:00 Clear weather 34
16:00 Clear weather 34
17:00 Clear weather 34
18:00 Clear weather 32
19:00 Clear weather 33
20:00 Clear weather 31
21:00 Clear weather 30
22:00 Clear weather 30
23:00 Clear weather 28
0:00 Clear weather 29
1:00 Clear weather 28
2:00 Clear weather 27
3:00 !!!!inserted by program!!!! <-- still missing 04000-0500, but even worse, dropped 0600 too
8:00 Clear weather 29
9:00 Clear weather 29
10:00 Clear weather 32
11:00 Clear weather 34
12:00 Clear weather 35
13:00 Clear weather 35
15:00 Clear weather 37
16:00 !!!!inserted by program!!!! <--dropped 1700
18:00 Clear weather 34
19:00 Clear weather 32
20:00 Clear weather 31
21:00 Clear weather 30
22:00 Clear weather 30
23:00 Clear weather 30