Como uma linha única, este exemplo de awk
é bastante complicado.
{
if (A!=$1) { # This section has a different A-column
if (a) { # If a>0, then it is not the beginning
print A,b/a # Print result
}
A=$1; # Re-init variables
a=0;
b=0
}
++a;
b += $2 ? 1 : 0
}
Para executar isso, coloque o script awk em frac-calc
e os números em number
e execute-os:
( cat number; echo ) | awk -E frac-calc
A saída seria:
494 0.5
500 0.333333
501 0.25
A razão pela qual o echo
é necessário, é que ele garante que o resultado do último bloco (501) seja impresso, já que a coluna A é diferente.
Também pode ser um longo one-liner:
( cat number; echo ) | awk '{if(A!=$1){if(a){print A,b/a}A=$1;a=0;b=0}++a;b+=$2?1:0}'
Editar : com o uso de END
e sem echo
, conforme mencionado nos comentários:
{
if (A!=$1) { # This section has a different A-column
if (a) { # If a>0, then it is not the beginning
print A,b/a # Print result
}
A=$1; # Re-init variables
a=0;
b=0
}
++a;
b += $2 ? 1 : 0
}
END {
print A,b/a # Print result
}
E chame:
awk -E frac-calc number
O revestimento é um pouco mais longo:
awk '{if(A!=$1){if(a){print A,b/a}A=$1;a=0;b=0}++a;b+=$2?1:0}END{print A,b/a}' number