Uma maneira de adaptar a solução awk baseada em matriz associativa seria concatenar o conteúdo de $3
e $4
para cada $1
e, em seguida, a END
aproveitar o fato de que gsub
retorna o número de substituições para contar ocorrências de A
e B
nas respectivas strings . Por exemplo:
awk '{
a[$1]=a[$1]$3$4;
next;
}
END{
for (i in a) {
n = length(a[i]) == 0 ? 1 : length(a[i]); # avoid div-by-zero
printf "%s A %.1f\n", i, gsub(/A/,"",a[i])/n;
printf "%s B %.1f\n", i, gsub(/B/,"",a[i])/n;}
}' input
EA04 A 0.0
EA04 B 0.0
OA03 A 1.0
OA03 B 0.0
ID01 A 0.5
ID01 B 0.5
ID02 A 0.0
ID02 B 1.0