複数の2D配列の数を合計する方法

複数の2D配列の数を合計する方法

次のようにファイルの数を合計する必要があります。

      column1  column2 column3
row1  a(1,1)   a(1,2)  a(1,3)
row2  a(2,1)   a(2,2)  a(2,3)
row3  a(3,1)   a(3,2)  a(3,3)
row4  a(4,1)   a(4,2)  a(4,3)


      column4  column5 column6
row1  b(1,1)   b(1,2)  b(1,3)
row2  b(2,1)   b(2,2)  b(2,3)
row3  b(3,1)   b(3,2)  b(3,3)
row4  b(4,1)   b(4,2)  b(4,3)

      column7  column8 column9
row1  c(1,1)   c(1,2)  c(1,3)
row2  c(2,1)   c(2,2)  c(2,3)
row3  c(3,1)   c(3,2)  c(3,3)
row4  c(4,1)   c(4,2)  c(4,3)

次のように出力します。

   column1    a(1,1)+a(2,1)       a(3,1)+a(4,1)  
   column2    a(1,2)+a(2,2)       a(3,2)+a(4,2)
   column3    a(1,3)+a(2,3)       a(3,3)+a(4,3)
   column4    b(1,1)+b(2,1)       b(3,1)+b(4,1)
   column5    b(1,2)+b(2,2)       b(3,2)+b(4,2)
   column6    b(1,3)+b(2,3)       b(3,3)+b(4,3)
   column7    c(1,1)+c(2,1)       c(3,1)+c(4,1)
   column8    c(1,2)+c(2,2)       c(3,2)+c(4,2)   
   column9    c(1,3)+c(2,3)       c(3,3)+c(4,3)

Bashでこれを行う方法はありますが、2つの2D配列でのみ機能し、この例では3つの2D配列で失敗します。私は多くの2D配列に便利なものが欲しいです。ここのスクリプトは2つの2D配列でのみ機能します。

   sed 's/row[1-6]//;/^$/d' test |   
   pr -2t |
   awk 'NR==1{$1=$1; print; next}
   !(NR%2){split($0,a); next}
         {for(i=1;i<=NF;i++) $i+=a[i]}1' |
    tr ' ' '\n' |
  pr -3t

注:合計を計算するには、セルインデックスを次の値に置き換えます。

       $ tr -d 'ab(,)' < file > filenums

答え1

私の考えの秘密は、-3t最初の列を使用してprから追加-w200(または同様のもの)して、最後の列が切り捨てられるのを防ぐことです。

pr -${N}t -w $((N*W))より一般的にN個の行列がある場合は、最初のprコマンドを使用します。ここではW、行列の文字幅です(たとえば、約10に列あたり1ポイントを加えた値)。

他のすべては大丈夫でしょう。

関連情報