-6

複数ファイル(10ファイル程度)のデータの平均値を計算したい。file1.dat、file2.dat、file3.dat、そして ... file10.dat があるとします。各ファイルには 2 つの列が含まれています。「1列目は行番号」、「2列目はデータ」です。合計で、ファイルに 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 のすべての最初の行のデータの平均を求めて、new fileに書き込みたいということです。次に、file1、file2...、および file10 のすべての 2 行目のデータを平均し、同じ新しい fileに書き込みます。

その新しいファイルは、次のような形式になっているはずです。例えば;

    1.00   0.112
    2.00   0.324
    3.00   0.887
    . 
    .

最初の列は行番号で、2 番目の列はデータの平均値です。わかりやすくするために、少し詳しく説明します。上記の例では、0.112が各ファイルの最初の行のすべてのデータの平均です。0.324は、各ファイルの 2 行目のすべてのデータの平均値です

私が欲しいのは、この計算を実行できるコードです。

ファイルを開くために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にはとがARGCありARGINDARGVこれを使用してどのファイルを識別することができます。また、ファイルごとに、各行でデータを保存するか、必要なデータのみを2次元配列に保存します。お気に入りarray[file,line]

最後にENDブロックで、ループと平均計算を行い、結果を出力します

awkについて知らない場合は、Pythonでもそのアイデアを適用できます。おそらく、perlもそれで機能するはずです。

それが役に立てば幸い。

于 2013-01-29T11:34:56.067 に答える
0

すべての入力ファイルを別々のファイル ハンドルで開き、出力ファイルを開きます。各入力ファイルから 1 行を読み取り、すべての値を加算してファイル数で除算し、結果を出力ファイルに書き込むループを実行します。

于 2013-01-29T11:46:44.890 に答える