计算文件中每一列的平均值
Calculate average of each column in a file
我有一个包含 n 行(用逗号分隔)和列的文本文件,我想找到每列的平均值,不包括空字段。
示例输入如下所示:
1,2,3
4,,6
,7,
期望的输出是:
2.5, 4.5, 4.5
我试过
awk -F',' '{ for(i=1;i<=NF;i++) sum[i]=sum[i]+$i;if(max < NF)max=NF;};END { for(j=1;j<=max;j++) printf "%d\t",sum[j]/max;}' input
但它将连续的分隔符视为一个和混合列。
非常感谢任何帮助。
你可以使用这条线:
$ awk -F, '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' foo
2.5 4.5 4.5
否则,您可以将其保存在文件中 script.awk
和 运行 awk -f script.awk your_file
:
{
for(i=1; i<=NF; i++) {
a[i]+=$i
if($i!="")
b[i]++}
}
END {
for(i=1; i<=NF; i++)
printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)
}
我有一个包含 n 行(用逗号分隔)和列的文本文件,我想找到每列的平均值,不包括空字段。
示例输入如下所示:
1,2,3
4,,6
,7,
期望的输出是:
2.5, 4.5, 4.5
我试过
awk -F',' '{ for(i=1;i<=NF;i++) sum[i]=sum[i]+$i;if(max < NF)max=NF;};END { for(j=1;j<=max;j++) printf "%d\t",sum[j]/max;}' input
但它将连续的分隔符视为一个和混合列。 非常感谢任何帮助。
你可以使用这条线:
$ awk -F, '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' foo
2.5 4.5 4.5
否则,您可以将其保存在文件中 script.awk
和 运行 awk -f script.awk your_file
:
{
for(i=1; i<=NF; i++) {
a[i]+=$i
if($i!="")
b[i]++}
}
END {
for(i=1; i<=NF; i++)
printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)
}