编写 unix 命令以显示每个科目分数超过 50 且平均分大于或等于 75 的所有学生的卷、姓名和平均值。
平均值可以计算为 (subj_1+subj_2(/2。
输入:
roll ,name,subScore1,subScore2
123,a,88,78
101,b,76,90
812,c,78,98
输出:
123 a 83
812 c 78
我的代码:
awk 'BEGIN {FS=',';OFS=' '} {if(NR>1 (&& $3>50 && $4>50) && ($3+$4)/2 >= 75){print $1,$2,($3+$4)/2}}' input_file
我不知道为什么我会收到错误。 请帮助伙计们。
编辑: 添加更通用的解决方案,其中 OP 的Input_file可能具有 4 个以上的字段/列,在这种情况下可以尝试以下操作。
awk '
BEGIN{
FS=","
}
FNR==1{
next
}
{
for(i=3;i<=NF;i++){
if($i>=50){
++count
}
sum+=$i
}
avg=(sum/count)
if(count==(NF-2) && avg>=75){
print $1,$2,avg
}
count=sum=avg=0
}
' Input_file
您能否尝试以下操作,使用GNUawk
显示的示例进行编写和测试。
awk '
BEGIN{
FS=","
}
FNR==1{
next
}
avg=($3+$4)/2
avg>=75 && ($3>=50 && $4>=50){
print $1,$2,avg
}
' Input_file