首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将printf用于十进制值输出wsl、awk和printf / bash时遇到问题

将printf用于十进制值输出wsl、awk和printf / bash时遇到问题
EN

Stack Overflow用户
提问于 2021-06-11 17:53:11
回答 2查看 55关注 0票数 0
代码语言:javascript
运行
复制
#!/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);
}

以下是正在使用的字段数据:

代码语言:javascript
运行
复制
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“谢谢?

EN

回答 2

Stack Overflow用户

发布于 2021-06-11 19:53:03

使用您显示的示例,请尝试以下awk程序。

代码语言:javascript
运行
复制
awk '
BEGIN{ FS="," }
FNR>1 && ($2=="online" || $2=="onsite"){
  count++
  sum+=$1
}
END{
  printf("Total Avg= %.02f\n",count!=""?(sum/count):"NA")
}
' Input_file
票数 1
EN

Stack Overflow用户

发布于 2021-06-11 20:06:12

代码语言:javascript
运行
复制
printf "online "(%d.2f,onlavg)

并不是在GNU AWK中使用printf的方式。如果要使用printf,第一个参数是带有格式说明符的字符串,然后是要放置的值列表,例如

代码语言:javascript
运行
复制
awk 'END{printf "%d is bigger than %d", 100, 99}' emptyfile.txt

输出

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
awk 'BEGIN{OFMT="%.2f"}END{print 10.5, "is bigger than", 9.5}' emptyfile.txt

输出

代码语言:javascript
运行
复制
10.50 is bigger than 9.50

(在gawk 4.2.1中测试的所有示例)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67934872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档