utilizando awk e fazendo um script awk - pergunta para iniciante

Oct 04 2020
  • os campos de entrada são nesta ordem: sobrenome, nome, seção, tarefa, série.
  • com uma lista de notas do arquivo de entrada grades.txt, faça um script awk que será impresso para corresponder ao formato abaixo.
  • imprima a nota média e o número de notas reprovadas (<= 60) na seção especificada.

grades.txt:

Alicia, Joseph, 2, 1, 40
Alfonzo, Gary, 3, 3, 85
Albert, Tom, 2, 1, 90
Bailey, Linda, 3, 2, 76
Butcher, Stewie, 3, 1, 80
Buser, Gary, 1, 3, 59
Canyon, Nicole, 2, 5, 90

EXEMPLO DE SAÍDA para a seção 1 (para o número da seção especificado na linha cmd)

Gary Buser – 59 – 3
Fails = 1
Average Grade = 59
BEGIN {
    # first last - grade - assignment
    # Fails     = 1
    # Avg Grade = grade
      }
      {
    for(i=0; i<=NF; i++)
    print($2, $1, $5, "-", $4);
    total+=$5; if ( $5 <= 60 )
        fails=fails++;
    else {
        fails=0;
        }
    avg=total/i;
    }
END {
   print("Fails        =", fails);
   print("Average Grade =", avg);
    }

A linha de comando que estou tentando usar, mas não está funcionando:

awk '$3==1' -f name.awk grades.txt

O que estou fazendo de errado para obter a saída desejada?

Respostas

3 EdMorton Oct 04 2020 at 20:31
$ cat tst.awk BEGIN { FS="[[:space:]]*,[[:space:]]*" } $3 == sect {
    print $2, $1, "-", $5, "-", $4
    if ( $5 <= 60 ) { fails++ } sum += $5
    cnt++
}
END {
    print "Fails =", fails+0
    print "Average Grade =", (cnt ? sum / cnt : 0)
}

$ awk -v sect=1 -f tst.awk grades.txt
Gary Busey - 43 - 3
Fails = 1
Average Grade = 43