average data in third column per month and round to the nearest hundredth

I have a file called output.txt and I want to average data per month. The original attached file should create month in the first column average value in the second column. Each row should look like this below. The averages are bogus just for example. See attached file.

output2.txt sample file rows with bogus data.
198001 120.22
198002 133.42
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

bazikaConnect With a Mentor Commented:
Here is the example of shell script.
I suppose, that the first field in output.txt is "YYYYMMDD", so selecting "substr($1, 1, 6 )" gives us "YYYYMM" (year+month).

Also, the summary of all fields from the 3-rd is taken (i.e. field3+field4+field5 ...)

I do not know, which awk version is used, therefor, I do additional initialization of the arrays.


cat output.txt | awk '
$3 != "" { cur_mon = substr($1, 1, 6 ) ;
        if( a_sum[cur_mon] == "" ) { a_sum[cur_mon] = 0 ; a_cou[cur_mon]  = 0 }
        for(i=3;i<=NF;i++) {
                a_sum[cur_mon] += $i;
                a_cou[cur_mon] ++ ;
        for (cur_mon in a_sum )
                { printf "%s %.2f\n", cur_mon, a_sum[cur_mon]/a_cou[cur_mon] ; }
' | sort -k 1

Open in new window

Could You please clarify the stucture of Your input file (which is called "output.txt")?

Sometimes there are 4 columns there, and later columns have 5 columns. Which exactly fields should be analyzed?
All Courses

From novice to tech pro — start learning today.