在awk中计算GPA?

时间:2013-03-28 17:35:24

标签: bash if-statement awk

我希望下面的代码是用类似于

的行解析文件
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语句。那么我输入的方式到底出了什么问题呢?

1 个答案:

答案 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
}