Что я хотел бы код, приведенный ниже, чтобы сделать, это разобрать файл с линиями, похожими наРасчет GPA в awk?
CSC3320,SYSTEM LEVEL PROGRAMMING,3,1,A
CSC3210,ASSEMBLY LEVEL PROGRAMMING,3,1,B
и вычислить средний балл на основе от уравнения суммы класса * кредитных часов/суммы кредитных часов. Я пытаюсь сделать это, вычислив числитель и знаменатель отдельно, а затем разделив два и напечатав вывод.
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
В моей книге не очень много говорится о том, если иное, если утверждения. Итак, что именно не так с тем, как я набрал это?
Вы не можете иметь переменные, делящиеся за пределами '{....}' block in awk '. Также вам не нужно инициализировать vars в awk. Поэтому 'awk '{calc and print}' 'будет вам ближе. Удачи. – shellter
Возможный дубликат [Awk print integer вместо плавающей запятой] (http://stackoverflow.com/questions/15693976/awk-printing-integer-instead-of-floating-point) –