我希望下面的代码是用类似于
的行解析文件CSC3320,SYSTEM LEVEL PROGRAMMING,3,1,A
CSC3210,ASSEMBLY LEVEL PROGRAMMING,3,1,B
并根据等级*信用小时数/信用小时数之和计算GPA。我试图通过分别计算分子和分母然后将两者分开并打印输出来做到这一点。
calculate(){
awk -F, '
numerator=0;
denominator=0;
if($4==1) {
if($5=="A"){
numerator+=(4*$3);
denominator+=$3
} else if ($5 == "B"){
numerator+=(3*$3);
denominator+=$3
} else if ($5 == "C"){
numerator+=(2*$3);
denominator+=$3
} else {
}
}
GPA = numerator/denominator
printf "Your GPA is %d\n" GPA
'my_course.txt
}
我得到的是一条错误消息
awk:第4行:语法错误在或附近如果
awk:第18行:printf或附近的语法错误
我的书中没有详细说明if if if语句。那么我输入的方式到底出了什么问题呢?
答案 0 :(得分:1)
此代码有效。
calculate(){
awk -F, '
BEGIN{printf "Your GPA is : "}
numerator = 0.0;
denominator = 0.0;
/^CSC/{
if($4=1) {
if($5=="A"){
numerator+=(4.0*$3);
denominator+=$3;
} else if ($5 == "B"){
numerator+=(3.0*$3);
denominator+=$3;
} else if ($5 == "C"){
numerator+=(2.0*$3);
denominator+=$3;
} else {
;
}
}
}
END{printf"%f", (numerator/denominator)}
' my_course.txt
}