여러 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에서 이 작업을 수행할 수 있는 방법이 있지만 두 개의 2D 배열에서만 작동하고 이 예제에서는 세 개의 2D 배열에서는 실패합니다. 나는 많은 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(또는 이와 유사한 것)하여 마지막 열이 잘리는 것을 방지하는 것입니다.

pr -${N}t -w $((N*W))보다 일반적으로 N개의 행렬이 있는 경우 첫 번째 pr명령을 사용합니다 . 여기서 W는 행렬의 문자 너비입니다(예: 약 10에 열당 1포인트를 더한 값).

다른 모든 것은 괜찮을 것입니다.

관련 정보