#!/usr/bin/awk
}
FS=","
}
/[0-9][0-9][0-9]?[,][o][n][l]/ { onlavg+=$2/5 }
END {
print"\n"
print "Section Average" "\n"
printf "online "(%d.2f,onlavg);
}以下是正在使用的字段数据:
Final Grade,Section
95,online
100,online
100,onsite
72,online
65,online
88,onsite
91,onsite
82,online
80,onsite代码应该采用在线学生成绩平均值或现场学生成绩输出为82.8,但我应该将其格式化为两个小数位为82.80我知道这很简单,我只是从来没有使用过bash到这种程度,也从来没有使用过
我正在计算平均值,但我需要输出为82.80,而不仅仅是82.8。我做错了什么?我使用WSL和它的bash作为我的shell来运行它。另外,我如何得到一个计数而不是预先的"5“谢谢?
发布于 2021-06-11 19:53:03
使用您显示的示例,请尝试以下awk程序。
awk '
BEGIN{ FS="," }
FNR>1 && ($2=="online" || $2=="onsite"){
count++
sum+=$1
}
END{
printf("Total Avg= %.02f\n",count!=""?(sum/count):"NA")
}
' Input_file发布于 2021-06-11 20:06:12
这
printf "online "(%d.2f,onlavg)并不是在GNU AWK中使用printf的方式。如果要使用printf,第一个参数是带有格式说明符的字符串,然后是要放置的值列表,例如
awk 'END{printf "%d is bigger than %d", 100, 99}' emptyfile.txt输出
100 is bigger than 99另外,%d.2f实际上是%d的说明符,后面跟着.2f,而不是整体的说明符,所以如果你做printf "%d.2f", 55.5,你会得到55.2f,在.是%.2f之后2位浮点数的正确说明符,例如printf "%.2f", 55.5给出55.50。最后,如果希望对输出中的所有数字使用相同的格式,则可以选择设置OFMT (输出ForMaT)并使用print而不是printf
awk 'BEGIN{OFMT="%.2f"}END{print 10.5, "is bigger than", 9.5}' emptyfile.txt输出
10.50 is bigger than 9.50(在gawk 4.2.1中测试的所有示例)
https://stackoverflow.com/questions/67934872
复制相似问题