Awk:打印每行的平均值

时间:2016-12-25 14:14:42

标签: bash awk

我有一个标题为"标记"线条是指学生的姓名,姓氏和本学期每个班级的4个分数,如下所示:

private static final String MY_PREFS_FILE_NAME = "MyFile";
private static final String KEY_SP_MUSIC_VOLUME = "KeySpMusicVol";

final SharedPreferences prefs = new ObscuredSharedPreferences(
            this, this.getSharedPreferences(MY_PREFS_FILE_NAME, Context.MODE_PRIVATE));

int musicVolume;
musicVolume = prefs.getInt(KEY_SP_MUSIC_VOLUME, 10);
Log.d(TAG, "volume = " + musicVolume);

我尝试创建一个awk脚本,打印每一行,每行(也就是每个学生)的平均分数和他的行数。

f.e。

John McJohn 56 68 31 99
Ronald McDonald 89 89 60 75
Boaty McBoatface 50 50 50 50

依旧等等。

我想出的是以下内容:

Student 1, John McJohn, 63,5
Student 2, Ronald McDonald, 78.25

但是这个输出看起来像是笛卡儿的产品:

enter image description here

我怀疑{ for(i=0; i<FNR; i++) { avg=($3+$4+$5+$6)/4; printf("Student %d, %s %s, %.2f\n", i, $1, $2, avg); } } 表达式是否存在问题,导致每个循环的行变得困难。

它应该如何?

1 个答案:

答案 0 :(得分:2)

如果学生&#39;名称在您不需要for循环

的文件中是唯一的
avg=($3+$4+$5+$6)/4;
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg);

您可以使用for循环来计算总和(如果您要添加4个以上的字段,这可能很方便):

for (i=3;i<7;i++) avg+=$i;
avg=avg/4;
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg)}