我有一个文件a1,其中包含一些值,
6 8 8
10 8 8
5 8 8
使用以下命令取每列的平均值后,
awk '{ total += $1 } END { print total/NR }' a1
awk '{ total += $2 } END { print total/NR }' a1
awk '{ total += $3 } END { print total/NR }' a1
我得到三个值,例如avg1(第一列的平均值为7),avg2(8)和avg3(8)。如何使用awk简化此过程,以便将值打印并保存到新文件中,其中avg1值放在第一列中,avg2放在第二列中,而avg3放在第三列中,以便文件说b1,看起来像这样,
7 8 8
谢谢!
这是一个动态解决方案,它不取决于列数:
awk '{
for (i=1; i<=NF; i++) {a[i]+=$i}
}
END {
for (i in a) {printf "%s ", a[i]/NR}
print ""
}' file
7 8 8
您不必运行三个awk
命令来平均三列。您可以将所有列求和成三个变量,例如column1的总和可以存储在col1
中,并且将它们的平均值求平均值在END
块中。
awk '{col1=col1+$1;col2=col2+$2;col3=col3+$3} END{print col1/NR,col2/NR,col3/NR}' a1 >b1