使用多个文件中的awk计算平均值

使用多个文件中的awk计算平均值,awk,Awk,我有500个文件名为fort.1,fort.2。。。500堡。每个文件包含800个数据,如下所示: 1 0.485 20.028 3 0.100 4 0.979 50.338 6 0.891 70.415 80.368 9 0.245 10 0.489 我想得到每个文件中第二列每行的平均值。换句话说,从所有文件中获取第二列第一行的平均值,并存储在“output.file”中。然后得到第二行第二列的平均值,并存储在同一个“output.file”中。 我尝试使用粘贴命令,但未能得到我想要的。 在A

我有500个文件名为fort.1,fort.2。。。500堡。每个文件包含800个数据,如下所示:

1 0.485
20.028
3 0.100
4 0.979
50.338
6 0.891
70.415
80.368
9 0.245
10 0.489

我想得到每个文件中第二列每行的平均值。换句话说,从所有文件中获取第二列第一行的平均值,并存储在“output.file”中。然后得到第二行第二列的平均值,并存储在同一个“output.file”中。 我尝试使用粘贴命令,但未能得到我想要的。 在AWK有什么办法吗

谢谢你的帮助。
谢谢我的理解:每个文件都是一组特定位置的测量值。您希望聚合所有位置的测量值,将每个文件中同一行的值平均到一个新文件中

假设第一列可以被视为行的ID(一个文件中有800个测量值):

猫堡。*| awk'
开始{

对于(i=1;i假设第一列是ID:

cat fort.* | awk '{sum[$1] += $2; counts[$1]++;} END {for (i in sum) print i, sum[i]/counts[i];}' 

这里有一个使用
粘贴
awk
的快速方法:

paste fort.* | awk '{ for(i=2;i<=NF;i+=2) array[$1]+=$i; if (i = NF) print $1, array[$1]/NF*2 }' > output.file

第1列中未作任何假设的awk:

awk '{a[FNR]+=$2;b[FNR]++;}END{for(i=1;i<=FNR;i++)print i,a[i]/b[i];}' fort.*

awk'{a[FNR]+=$2;b[FNR]+;}END{for(i=1;ii)在这段代码中,我的理解是,首先fort.1文件中的所有值都保存在数组“total”中。接下来,它将读取第二个文件fort.2并保存在数组中total。(例如,然后它将执行(total[1]+total[1]/2)分别从第一个文件和第二个文件中获取平均值。但我不明白这一点…如果我理解错误,很抱歉。编辑以反映我对问题的假设。感谢您的快速回复。让我再次澄清我想要的内容。每个文件(总共500个文件)包含两列(第一列和第二列)有800行。我希望添加每个文件(所有500个文件)的第一行第二列,计算平均值,并将其存储在一个新文件中作为average.output。然后它转到所有文件(500个文件)的第二行第二列计算平均值并存储平均值。输出,直到平均值。输出文件包含800行。希望你得到这个解释。对不起,如果我在帖子中的问题使你感到困惑。提前感谢。这个代码是否考虑了所有输入文件的第一行(第1堡,第2堡……)并计算平均值,然后转到所有文件的第二行(fort.1、fort.2…)直到每个文件有800行?我需要一些解释来理解这段代码的实际功能。Thanks@Vijay:确实如此..用fort更新了它。*为了让它更清楚。你可以用一个小样本文件来测试它以确认…大师,这段代码工作得很好。谢谢。另外还需要添加一些小东西。我有一些名为fort的文件.1、2号堡等等。我担心如果我把。*号堡放进去,它会读成1号堡、10号堡、100号堡,而不是1号堡、2号堡等等。如何处理?Thanks@Vijay:fort.*将读取fort.1、fort.2、…fort.10、fort.100等。以fort.开头的每个文件都将被读取,我认为这也是您想要的。如果它确实读取fort.10和fort.100 b在fort.2之前,最终平均值应该无关紧要。
awk '{ sum[$1]+=$2; cnt[$1]++ } END { for (i in sum) print i, sum[i]/cnt[i] | "sort -n" }' fort.*
awk '{a[FNR]+=$2;b[FNR]++;}END{for(i=1;i<=FNR;i++)print i,a[i]/b[i];}' fort.*