Verifique isso:
awk -F, '{date1[$4]+=$1;++date2[$4]}END{for (key in date1) print "Average of",key,"is",date1[key]/date2[key]}' file
Average of 27:May:2017 is 2677.57
Average of 26:May:2017 is 1410.02
Average of 25:May:2017 is 2940.02
Explicação:
-F,
: define o delimitador. Como alternativa, pode ser awk 'BEGIN{FS=","}...
Em seguida, criamos dois arrays date1
e date2
nos quais usamos o quarto campo $4
como índice / chave da matriz e o primeiro campo $1
como valor adicionado ao valor existente da mesma posição da matriz.
Então, para a primeira linha, teríamos
date1[27:May:2017]+=2415.02
e ++date2[27:May:2017]
- > aumenta o valor em 1 - > valor 1 para primeira linha
Para a próxima data (linha 2), teríamos
date1[27:May:2017]+=2415.02 + 3465.02
e ++date2[27:May:2017]
- > aumenta o valor em 1 - > valor 2 (segunda linha)
A mesma lógica se estende a todas as linhas que possuem a mesma data e também a todas as datas diferentes.
No final, usamos um loop for
para percorrer as chaves da matriz date1
(ou date2
- as chaves são iguais nas duas matrizes = > $4
) e para cada key
descobrimos que imprimimos key
(= a data $ 4) e também imprimimos a date1[key]
value = soma de todos os valores $1
para a mesma data $4
, dividido por date2[key]
value = contagem numérica das linhas encontrado com a mesma data = mesmo $4
.