-6

我想计算多个文件中数据的平均值:(大约 10 个文件)。假设我有 file1.dat、file2.dat、file3.dat 和 ... file10.dat。每个文件包含两列。“第一列是行号”,“第二列是数据”。我在一个文件中总共有 1800 行。数据的模式如下图所示:

    1.00   0.659
    2.00   0.608
    3.00   0.578
    4.00   0.557
    5.00   0.543
    6.00   0.527
    7.00   0.514
    8.00   0.502
    9.00   0.489
    . 
    .
    .
 1800.00   0.480

我想根据每个文件的行号计算数据的平均值。这意味着,我想从 file1、file2... 和 file10 中找到所有第一行数据的平均值并写入新文件。然后平均来自 file1、file2... 和 file10 的所有第二行数据,并写入同一个新文件

新文件应该具有如下格式。例如;

    1.00   0.112
    2.00   0.324
    3.00   0.887
    . 
    .

其中第一列是行号,第二列是数据的平均值。为了清楚起见,我将解释一些细节。在上面的示例中,0.112是每个文件第一行中所有数据的平均值。0.324是每个文件第二行所有数据的平均值。

我想要的是可以完成这个计算的代码。

我试过用 perl 打开一个文件。但是在试图弄清楚将想法转换为代码时迷失了方向。我写的perl如下

#!/usr/bin/perl -w

open (FILE, "file1.dat") or die $!;
while (<FILE>) {
chomp;
print "$_\n";
}
close (FILE);

提前致谢。

4

3 回答 3

1

我几乎忘记了关于 bash 脚本的所有内容。但我认为你可以做这样的事情。

files=(file1 file2 file3 file4)
for i in `seq  4`
do
  j=$(($i-1))
  f[$j]=`cat ./temp/${files[$i]} | awk '{print $2}' `
done

for i in `seq 0 1799`
do
  sum=0
  rowValue=0
  for j in `seq 0 3`
  do
    fileContent=(${f[$j]})
    rowValue=`echo ${fileContent[$i]} `
    sum=$(($sum + $rowValue))    
  done
  echo "sum is" $i $sum
done
于 2013-01-29T12:54:46.593 回答
0

你问的是指导,而不是代码,那么我可以用 gawk 说出我的想法。

gawk 有ARGCandARGINDARGVwhich 你可以用来识别哪个文件。并且对于每个文件的每一行都保存数据,或者仅将您需要的数据保存到二维数组中。像array[file,line]

最后在 END 块中,你做循环,平均计算,打印结果

如果你不了解 awk,你也可以在 python 中应用这个想法,我想(不确定)perl 也应该使用它。

希望能帮助到你。

于 2013-01-29T11:34:56.067 回答
0

在单独的文件句柄上打开所有输入文件,然后打开输出文件。执行一个循环,从每个输入文件中读取一行,将所有值相加并除以文件数,然后将结果写入输出文件。

于 2013-01-29T11:46:44.890 回答