2013-03-28 68 views
0

我想代碼下面是什麼做的是分析與同類行的文件,以在awk中計算GPA?

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 else語句。那麼,我如何輸入這些信息到底出了什麼問題?

+0

您不能將變量在awk中的{{}}塊之外展開。你也不需要在awk中初始化變量。所以'awk'{calc and print}'會讓你更接近你。祝你好運。 – shellter

+0

可能重複[Awk打印整數而不是浮點](http://stackoverflow.com/questions/15693976/awk-printing-integer-instead-of-floating-point) –

回答

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 
}