Как использовать шаблон с переменными в awk

Как использовать шаблон с переменными в awk

Мой файл выглядит следующим образом: я хочу отобразить записи тех студентов, чей процент превышает 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

Связанный контент