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