utiliser awk et créer un script awk - question pour débutant

Oct 04 2020
  • les champs de saisie sont dans cet ordre: nom, prénom, section, devoir, note.
  • avec une liste de notes du fichier d'entrée grades.txt, créez un script awk qui s'imprime pour correspondre au format ci-dessous.
  • imprimer la note moyenne et le nombre de notes échouées (<= 60) dans la section spécifiée.

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

EXEMPLE DE SORTIE pour la section 1 (pour le numéro de section spécifié sur la ligne 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);
    }

La ligne de commande que j'essaie d'utiliser mais cela ne fonctionne pas:

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

Qu'est-ce que je fais de mal pour obtenir le résultat souhaité?

Réponses

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