Primeiro, erros gramaticais
Você tem um {
extra antes da linha com function
:
BEGIN{FS = ":"}
{
function average(ARGV[2]){
...
}
Então deve ser:
BEGIN{FS = ":"}
function average(ARGV[2]){
...
}
Então, você está criando uma função que recebe um parâmetro. Esse parâmetro deve ter o escopo local da função, portanto, chamá-lo de ARGV[2]
é apenas um grande mal-entendido dos escopos. Apenas use algo como:
function average(row) {
# things with the variable row
}
E você usa ARGV[2]
quando chamando a função: average(ARGV[2])
.
Então, erros de conceito
Você está usando uma função que chama em cada iteração para calcular a média. Se você quiser usar funções, use uma para acompanhar os valores e, finalmente, e, em seguida, imprima os valores.
Além disso, você está repetindo um monte de códigos em todas as suas condições if - else if - else
. Observe que, por mais que você possa dizer $4
, você também pode dizer var=row
e, em seguida, usar $var
para usar o valor de row
th :
if(ARGV[2] == "Row3"){
sumJan += $3
avgJan = sumJan / 5
printf "The average of row %-10s is %6.2f", ARGV[2], avgJan
}
pode ser genérico:
sum += $row
avg = sum / 5
printf "The average of row %-10s is %6.2f", row, avgJan
No total, isso pode ser uma frase sucinta
$ awk -F: -v col=4 '{sum+=$col} END {print sum/NR}' file
3
Isso mantém uma soma do número da coluna col
e finalmente divide pelo número de linhas.