Мой файл выглядит следующим образом: я хочу отобразить записи тех студентов, чей процент превышает 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
поэтому я использовал следующий код:
awk '(($3+$4+$5)/3)>80 {print}' stud
Это работает, но я хочу присвоить эти столбцы переменной, а затем отобразить вывод. Поэтому я попробовал следующий код, но он не сработал
awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud
есть ли решение с переменными?
решение1
Вы можете переместить логику изправилораздел надействие
awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
2 George 90 95 82
4 Dennie 89 92 90
Обратите внимание, что это пытается арифметически оценить заголовки столбцов — что «работает», потому что в awk
нечисловые поля рассматриваются как ноль, когда вы пытаетесь выполнить с ними арифметические действия — но приведет к печати строки заголовка, если, например, вы изменили тест на per<80
. Лучше, по моему скромному мнению, было бы либо явно пропустить строку заголовка, используя next
действие для правила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
или, если вам нужен заголовок, явно выведите его на печать
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
решение2
Пытаться:
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
выход
2 George 90 95 82
4 Dennie 89 92 90