다음과 같이 파일의 숫자를 합산해야 합니다.
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포인트를 더한 값).
다른 모든 것은 괜찮을 것입니다.