miércoles, 18 de mayo de 2011

Sum by

Para calcular cuántas horas por día trabajo, necesité una especie de sum(horas) GROUP BY día a partir del siguiente input de horas por tarea:

$ donetasks
2011-05-17 1.00 FrancesGO2 -> Schedule
2011-05-17 4.50 FrancesGO2 -> Deployment
2011-05-17 1.50 FrancesGO2 -> Sysadmin, environments
2011-05-17 0.50 FrancesGO2 -> Analisis Funcional
2011-05-17 0.50 FrancesGO2 -> Meetings
2011-05-17 1.00 FrancesGO2 -> Tooling
2011-05-18 0.50 FrancesGO2 -> Deployment

Decidí que el Aho, Weinberger y Kernighan vendrían al rescate. Hice un script que llamé sumby que toma los índices de dos columnas: por cuál agrupar, y cuál sumar:

awk -v group=$1 -v sum=$2 '
{ bag[$group]+=$sum }
END { for (val in bag) { print val ": " bag[val] } }
'

Lo uso así:

$ donetasks | sumby 1 2
2011-05-17: 9
2011-05-18: 0.5

No hay comentarios:

Publicar un comentario