我想计算多个文件中数据的平均值:(大约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);
提前致谢。
答案 0 :(得分: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
答案 1 :(得分:0)
你问的是指导,而不是代码,然后我可以用gawk告诉我的想法。
gawk有ARGC
和ARGIND
以及ARGV
,您可以使用它来识别哪个文件。并且对于每个文件,每行保存数据,或仅将您需要的数据保存到二维数组中。比如array[file,line]
最后在END块中,你进行循环,并进行平均计算,打印结果
如果你不了解awk,你也可以在python中应用这个想法,我猜(不确定)perl也应该使用它。
希望它有所帮助。答案 2 :(得分:0)
打开单独文件句柄上的所有输入文件,然后打开输出文件。执行一个循环,从每个输入文件读取一行,将所有值加在一起并除以文件数,然后将结果写入输出文件。