Bash 列相关平均值
Bash column dependant average
*这是一个重复的问题: calculate and print the average value of strings in a column
我有一个包含两列的文件:
9 152
391 576
391 104
391 335
391 129
391 280
394 184
394 64
394 313
394 159
394 335
394 159
394 66
394 435
394 145
450 318
450 131
450 131
(实际是几千行)
我正在尝试为左侧的每个数字生成平均值,我正在寻找的输出将是(保持小数点后一位):
9 152
391 284.8
394 206.6
据我所知,解决方案是一个 awk 命令,也许还使用了 uniq。
另一个需要相同文件的文件:
2014-05-10 23:50 335
2014-05-10 23:50 134
2014-05-10 23:50 134
2014-05-10 23:50 610
2014-05-10 23:50 131
2014-05-10 23:50 315
2014-05-10 23:50 131
2014-05-10 23:50 1055
2014-05-10 23:50 315
像这样的东西会起作用:
$ awk '{a[]+=;++c[]}END{for(i in a)printf "%d\t%.1f\n", i, a[i]/c[i]}' file
391 284.8
394 206.7
9 152.0
450 193.3
数组 a
为第一列中的每个数字保留一个单独的总和。 c
记录有多少行对每个平均值有贡献。处理文件后,将打印第一列中每个数字的平均值。格式说明符 %.1f
打印平均值,精确到小数点后一位。
请注意,数组 a
中键的顺序未定义,因此输出顺序与输入顺序不同。如有必要,很容易解决这个问题。
没有数组的 Awk 方式假定所有数字都已分组
awk 'x~/./&&x!={printf "%d\t%.1f\n",x,y/z;y=z=""}
{x=;z++;y+=}END{printf "%d\t%.1f\n",x,y/z}' file
9 152.0
391 284.8
394 206.7
450 193.3
*这是一个重复的问题: calculate and print the average value of strings in a column
我有一个包含两列的文件:
9 152
391 576
391 104
391 335
391 129
391 280
394 184
394 64
394 313
394 159
394 335
394 159
394 66
394 435
394 145
450 318
450 131
450 131
(实际是几千行)
我正在尝试为左侧的每个数字生成平均值,我正在寻找的输出将是(保持小数点后一位):
9 152
391 284.8
394 206.6
据我所知,解决方案是一个 awk 命令,也许还使用了 uniq。
另一个需要相同文件的文件:
2014-05-10 23:50 335
2014-05-10 23:50 134
2014-05-10 23:50 134
2014-05-10 23:50 610
2014-05-10 23:50 131
2014-05-10 23:50 315
2014-05-10 23:50 131
2014-05-10 23:50 1055
2014-05-10 23:50 315
像这样的东西会起作用:
$ awk '{a[]+=;++c[]}END{for(i in a)printf "%d\t%.1f\n", i, a[i]/c[i]}' file
391 284.8
394 206.7
9 152.0
450 193.3
数组 a
为第一列中的每个数字保留一个单独的总和。 c
记录有多少行对每个平均值有贡献。处理文件后,将打印第一列中每个数字的平均值。格式说明符 %.1f
打印平均值,精确到小数点后一位。
请注意,数组 a
中键的顺序未定义,因此输出顺序与输入顺序不同。如有必要,很容易解决这个问题。
没有数组的 Awk 方式假定所有数字都已分组
awk 'x~/./&&x!={printf "%d\t%.1f\n",x,y/z;y=z=""}
{x=;z++;y+=}END{printf "%d\t%.1f\n",x,y/z}' file
9 152.0
391 284.8
394 206.7
450 193.3