I am using awk to go through a text file that has information of finished scripts then says complete (morning) then informaton of finished scripts then says complete (afternoon) then information of finished scripts then says complete (night).
I am trying to keep track of the finished scripts for each block.
The way I am doing it is…
awk ' /Completed/ {next} //finished morning block /Finished/ {mornCount+=1} //count finishes in morning block /Completed/ {next} /Finished/ {afterCount+=1} /Completed/ {exit} /Finished/ {nightCount+=1} END{ print "procedures completed this morning: " mornCount print "procedures completed this afternoon: " afterCount print "procedures completed at night: " nightCount } ' file.txt
However the values I get for morn, after, and night is the same.
start start start Finished Finished Finished Completed start start Finished Finished Completed start Finished Complete
so I would want 3, 2, and 1 as my output – finishes for (morning, afternoon, and night)
Advertisement
Answer
This should work
awk 'BEGIN{split("morning afternoon night",a)} /Finished/{x++} /Completed/{print a[++y]":"x;x=0}' file
BEGIN block executes at the start of the script. The split just creates an array like
a[1] = morning a[2] = afternoon a[3] = night
x is incremented every time Finished is seen
When completed is seen, y is incremented and value from that position in a
is printed with the value in x.
x is reset
repeat
Output from your example
morning:3 afternoon:2 night:1