Mi archivo es el siguiente; Quiero mostrar aquellos registros de estudiantes cuyo porcentaje sea superior a 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
entonces utilicé el siguiente código:
awk '(($3+$4+$5)/3)>80 {print}' stud
Funciona, pero quiero asignar estas columnas a una variable y luego mostrar el resultado. Así que probé el siguiente código, pero no funcionó.
awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud
¿Alguna solución con variables?
Respuesta1
Puedes mover la lógica desde elreglasección en unacción
awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
Tenga en cuenta que esto intenta evaluar los encabezados de las columnas aritméticamente, lo cual "funciona" porque en awk
, los campos no numéricos se tratan como cero cuando intenta hacer aritmética con ellos, pero causaría que la línea del encabezado se imprimiera si, por ejemplo, cambió la prueba a per<80
. En mi humilde opinión, sería mejor omitir explícitamente la línea del encabezado usando una next
acción para la regla.NR==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
o, si desea el encabezado, imprímalo explícitamente
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
Respuesta2
Intentar:
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
producción
2 George 90 95 82
4 Dennie 89 92 90