可以awk
处理不规则的列吗?即我有一个像下面这样的文件,其中每一列可能有不同数量的值。
如何获得所有正值的平均值?
请注意,不完整的行不包括空格/空格,因此您不能sed
用来替换这些空格。
1 2 3 7
4 5
5 0
0 8 9
0
我知道如何获得如下常规文件的平均值,但如果最后一行不完整(4 个数字),它将不起作用。另外,下面的代码只能分别打印每列的平均值。
我需要所有非零数字的平均值,而不是每一列。
如何使用awk
或python
做到这一点?
我的预期输出是一个数字:4.888888889
((1+2+3+7+4+5+5+8+9)/9=4.888888889)
awk '{for (i=1;i <= NF; i++) if ($i>0) { sum[i] += $i; num[i]++; } } END { for(i =1;i <= NF; i++) print i, sum[i]/num[i]}' $infile
如果您想要所有列中所有数字的平均值,那么这很简单
如果您想要每列的平均值,只需跟踪最大列数:
GNU
awk
方法:输出:
我会将空格转换为换行符,每行有一个数字: