Generating summary data (use awk?)

I have a data file similar to this (but many millions of lines long). You can assume that it is totally unsorted but has no duplicate rows.

Date     ,Tool_Type  ,Tool_ID      ,Time_Used
3/13/2014,Screwdriver,Screwdriver02, 6
3/13/2014,Screwdriver,Screwdriver02,20
3/13/2014,Screwdriver,Screwdriver02, 1
3/13/2014,Screwdriver,Screwdriver03,14
3/13/2014,Screwdriver,Screwdriver01, 9
3/13/2014,Screwdriver,Screwdriver01,10
3/13/2014,Screwdriver,Screwdriver03,16
3/13/2014,Screwdriver,Screwdriver02,14
3/14/2014,Screwdriver,Screwdriver01,16
3/14/2014,Screwdriver,Screwdriver01, 6
3/14/2014,Screwdriver,Screwdriver01, 7
3/14/2014,Screwdriver,Screwdriver02,15
3/14/2014,Screwdriver,Screwdriver02, 7
3/14/2014,Screwdriver,Screwdriver01, 5
3/14/2014,Screwdriver,Screwdriver01, 4
3/13/2014,Hammer     ,Hammer03     ,16
3/13/2014,Hammer     ,Hammer02     , 9
3/13/2014,Hammer     ,Hammer01     ,11
3/13/2014,Hammer     ,Hammer01     ,13
3/13/2014,Hammer     ,Hammer02     ,15
3/13/2014,Hammer     ,Hammer02     ,19
3/13/2014,Hammer     ,Hammer02     ,17
3/13/2014,Hammer     ,Hammer01     ,14
3/13/2014,Hammer     ,Hammer01     , 4
3/14/2014,Hammer     ,Hammer02     , 9
3/14/2014,Hammer     ,Hammer02     ,16
3/14/2014,Hammer     ,Hammer01     , 4
3/14/2014,Hammer     ,Hammer01     ,11
3/14/2014,Hammer     ,Hammer03     , 5
3/14/2014,Hammer     ,Hammer03     ,17

I want to get summary statistics by day-tool_type and day-tool_ID. Order is not important and I can concatenate the result of two queries if I need to.

Date     ,Tool             ,Times_Used,Total_Time_Used
3/13/2014,Hammer (all)     ,9         ,118
3/13/2014,Hammer01         ,4         , 42
3/13/2014,Hammer02         ,4         , 60
3/13/2014,Hammer03         ,1         , 16
3/13/2014,Screwdriver (all),8         , 90
3/13/2014,Screwdriver01    ,2         , 19
3/13/2014,Screwdriver02    ,4         , 41
3/13/2014,Screwdriver03    ,2         , 30
3/14/2014,Hammer (all)     ,6         , 62
3/14/2014,Hammer01         ,2         , 15
3/14/2014,Hammer02         ,2         , 25
3/14/2014,Hammer03         ,2         , 22
3/14/2014,Screwdriver (all),7         , 60
3/14/2014,Screwdriver01    ,5         , 38
3/14/2014,Screwdriver02    ,2         , 22

I think AWK is the best tool.

I think I could run through the file NR>1 building three associative arrays

count[$1 "-" $2]++
count[$1 "-" $3]++
sum[$1 "-" $2] += $4
sum[$1 "-" $3] += $4
tags[$1 "-" $2] = $1 "," $2 " (all)"
tags[$1 "-" $3] = $1 "," $3

What I don't know how to do is barf up the existing array elements at the end. Any suggestions? Am I going to run out of memory with this approach and is there a better way?

Mike

---------- Post updated at 03:59 AM ---------- Previous update was at 03:25 AM ----------

Will this work?

OFS = ","; for ( var in count) { print tags[var],count[var],sum[var] }

Mike

---------- Post updated at 09:20 AM ---------- Previous update was at 03:59 AM ----------

It works!

awk -F, 'NR == 1 {print "Headers,Redacted,For,IP,Reasons,Demand,Cum_Demand"}
         NR > 1 {byToolType = ($1 "-" $2 "-" $10); byTool = ($1 "-" $3 "-" $10)
                 count[byToolType]++; count[byTool]++
                 sum[byToolType] += $7; sum[byTool] += $7
                 tags[byToolType] = $10","$1","$2","$2"xxx,"$1"-"$2"xxx"
                 tags[byTool] = $10","$1","$2","$3","$1"-"$3
                }
         END {OFS = ","; for ( var in count) { print tags[var], count[var], sum[var] }
             }' "$scratchDir""$filename" > "$scratchDir""$outputNameString""$filename"

Never estimate the havoc leaving out -F, can wreck on an AWK script!

Thanks for the updates!:b:
:cool:

I've already added a mean demand column and will be adding a standard deviation column soon. I'm going to concatenate values to the array element and the split and loop over them in the END block to calculate standard deviation.

Mike