我需要对文件中的数字进行求和,如下所示:
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 中有一种方法可以做到这一点,但它只能对两个 2D 数组起作用,并且在这个包含三个 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
(或这样)以避免最后一列被剪裁。
更一般地,如果您有 N 个矩阵,您将使用pr -${N}t -w $((N*W))
第一个pr
命令,其中W
是一个矩阵的字符宽度(例如,每列大约 10 加一点)。
其他一切都应该没问题。