如何使用bash对位于二维数组文件中的数字进行求和

时间:2016-05-25 13:54:46

标签: bash

我有一个包含以下数据的文件:

       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)

我需要对数组的元素求和,以显示输出

这样的输出
 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)

我觉得这样做的方法是指定每个数字的位置和它们的总和,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

管道的舞蹈

$ sed 's/row[0-9]//;/^$/d' filenums | 
  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

column1                 32                      72
column2                 34                      74
column3                 36                      76
column4                 32                      72
column5                 34                      74
column6                 36                      76

计算总和我用这个

的值替换了单元格索引
$ tr -d 'ab(,)' < file > filenums

所以a(1,1)变成11等等。

答案 1 :(得分:1)

你可以创建像这样的多维数组

  

awk'BEGIN {i = 0} {i ++; r [i] [0]; split($ 0,r [i],“”);} END {print r [1] [1] + r [2 ] [1] #do your math here}'filename