如何在awk中使用带有变量的模式

Dip*_*Dip 2 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
Run Code Online (Sandbox Code Playgroud)

所以我使用了以下代码:

awk '(($3+$4+$5)/3)>80 {print}' stud
Run Code Online (Sandbox Code Playgroud)

它有效,但我想将这些列分配给变量,然后想显示输出。所以我尝试了下面的代码,但没有用

awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud
Run Code Online (Sandbox Code Playgroud)

任何带有变量的解决方案?

ste*_*ver 5

您可以将规则部分的逻辑移动到操作中

awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
   2       George      90        95       82
   4       Dennie      89        92       90
Run Code Online (Sandbox Code Playgroud)

请注意,这尝试以算术方式评估列标题 - 这“有效”,因为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
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要标题,请明确打印它

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
Run Code Online (Sandbox Code Playgroud)