0

我希望下面的代码做的是解析一个文件,其行类似于

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 行:在或附近出现语法错误 if
awk:第 18 行:在 printf 或附近出现语法错误

我的书没有详细说明 if else if 语句。那么我输入的方式到底有什么问题呢?

4

1 回答 1

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
}
于 2013-03-28T23:11:12.133 回答