Meu arquivo está como abaixo; Quero exibir os registros de alunos cujo percentual está acima de 80.
Studid StudName Asp.Net DBMS Unix
1 Ani 75 62 80
2 George 90 95 82
3 Jake 45 30 40
4 Dennie 89 92 90
então usei o seguinte código:
awk '(($3+$4+$5)/3)>80 {print}' stud
Funciona, mas quero atribuir essas colunas à variável e depois exibir a saída. Então tentei o código abaixo, mas não funcionou
awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud
alguma solução com variáveis?
Responder1
Você pode mover a lógica doregraseção em umAção
awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
Observe que isso tenta avaliar os cabeçalhos das colunas aritmeticamente - o que "funciona" porque em awk
, os campos não numéricos são tratados como zero quando você tenta fazer operações aritméticas com eles - mas faria com que a linha do cabeçalho fosse impressa se, por exemplo, você alterei o teste para per<80
. Melhor IMHO seria pular explicitamente a linha do cabeçalho usando uma next
ação para a regraNR==1
awk 'NR==1 {next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
ou, se você quiser o cabeçalho, imprima-o explicitamente
awk 'NR==1 {print; next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
Studid StudName Asp.Net DBMS Unix
2 George 90 95 82
4 Dennie 89 92 90
Responder2
Tentar:
awk '
# if /^Studid/ is matched move to the next record (row) of the input text
/^Studid/ { next }
{
total=$3+$4+$5
per=total/3
if (per > 80)
print
}' stud
saída
2 George 90 95 82
4 Dennie 89 92 90