$ awk -F, 'NR>1 && /^[SMTWF]/{print sum;f=0} /^S/{print;sum=0;f=1;next} {sum+=$1$2} END{if (f)print sum}' file
Sat 02/28/2015__19:32:37.63
600048
Sat 02/28/2015__19:37:38.41
475428
Sun 02/29/2015__16:32:40.11
600087
Sun 02/29/2015__16:32:49.20
475394
Como funciona
-
-F,
Use uma vírgula para o separador de campos.
-
NR>1 && /^[SMTWF]/{print sum;f=0}
Para qualquer linha após a primeira, se começar com a primeira letra de um dia da semana, imprima a soma.
-
/^S/{print;sum=0;f=1;next}
Se a linha atual começar com a letra S (para sábado ou domingo), imprima a linha, inicialize a soma como 0, defina o sinalizador
f
para 1 e pule diretamente para a linhanext
. / p> -
sum+=$1$2
Para todas as outras linhas, adicione o número a
sum
.awk
não entenderia uma vírgula separando os dígitos. Desde que uma vírgula foi usada como o separador de campo, então$1$2
é o número sem a vírgula, que é um formulário que o awk entenderá. -
END{if (f)print sum}
Imprima a última soma restante se estivermos atualmente em um grupo de sábado ou domingo. Para conseguir isso, usamos o sinalizador
f
. Se o último agrupamento foi de segunda a sexta, então f == 0 e a soma não será impressa. Se foi sábado ou domingo, então f == 1 e será impresso.