我的文件如下;我想显示那些百分比高于 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)
任何带有变量的解决方案?
您可以将规则部分的逻辑移动到操作中
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)