我的文件如下;我想显示百分比高于 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