linux - 使用awk计算平均成绩

标签 linux bash unix awk command

我有这样一个文件:

id1 name1 grade1 grade2 grade3....gradeN
id2 name2 grade1 grade2 grade3....gradeN
etc

我想使用 awk 打印每行的 id、名称和平均成绩。 任何想法? 输出应该是这样的:

id1 name1 avg_of_grades
id2 name2 avg_of_grades

最佳答案

使用awk:

awk '{sum=0;for(i=3;i<=NF;i++) sum+=$i; print $1, $2, (NF>2?sum/(NF-2):0)}' file

从第三列迭代到行尾,并在名为 sum 的变量中捕获总数。完成后,只需打印第 1、2 列和平均值。由于 sum 将包含滚动总计,我们在脚本的开头将其设置为 0 以针对每一行对其进行初始化。

请注意,对于平均值,我使用了 NF 变量,它包含每行的总列数。我们减去 2 以获得正确的总数(我们从第三列开始捕获)。

此外,如果您只有两列,我还添加了除以零的检查。

关于linux - 使用awk计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749647/

相关文章:

java - 如何强制终止 Http HEAD 命令(对于 HttpClient 和curl)?

linux - 编译链接,警告找不到libpcre.so.1

在mac终端找不到android命令

linux - 这是写opts的正确方法吗

c - 用多个 if on curses 替换 switch

c++ - 如何共享我的 C/C++ 项目并隐藏部分源代码?

linux - unix中的子命令替换多个符号,如何?

linux - 从 txt 向 Git bash 添加函数

linux - Bash 脚本 - 检查用户是否登录

linux - 在命令行中复制一系列文件夹