如何使用awk将值另存为新列? [重复]

问题描述 投票:0回答:1

我有一个文件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
1个回答
2
投票

这是一个动态解决方案,它不取决于列数:

 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

0
投票

您不必运行三个awk命令来平均三列。您可以将所有列求和成三个变量,例如column1的总和可以存储在col1中,并且将它们的平均值求平均值在END块中。

awk '{col1=col1+$1;col2=col2+$2;col3=col3+$3} END{print col1/NR,col2/NR,col3/NR}' a1 >b1
© www.soinside.com 2019 - 2024. All rights reserved.