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
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas