숫자 표의 행과 열 합계

숫자 표의 행과 열 합계

디지털 테이블이 많아요. 다음은 단지 예입니다.

A 25 27 50 
B 35 37 75 
C 75 78 80 
D 99 88 76 

추가 처리를 위해 각 테이블의 행과 열을 합산하려고 하므로 출력은 다음과 같습니다.

A 25 27 50 102
B 35 37 75 147
C 75 78 80 233
D 99 88 76 263
234 230 281

어떻게 해야 합니까? 나는 시도했지만 awk성공하지 못했습니다.

답변1

일반적으로 다음을 수행해야 합니다.

awk '{ sumrows=0;
    for (i=2; i<=NF; i++) {
        sumcols[i]+= $i; sumrows+= $i 
    }; print $0, sumrows+0
}
END { for (x in sumcols)
         { printf SEP sumcols[x]+0; SEP=OFS };
     print ""
}' infile

sumcols[i]+= $i부분은 동일한 열 위치의 필드 값을 합산 sumrows+= $i한 다음, print $0, sumrows각 행을 읽은 후 행을 인쇄하는 것입니다.

그리고 END루프 에서숨켈스배열이며 printf단선 인쇄에 사용됩니다. SEP기본값으로 설정에프생산하다에스각 인쇄물 사이에 공백을 추가하기 위해 두 번째 인쇄물에서 다음 인쇄물까지 사용되는 구분 기호입니다.

답변2

다음 명령을 시도해 볼 수 있습니다.

awk '{sum2+=$2; sum3+=$3; sum4+=$4} END {print sum2,sum3,sum4}''{print $0, $2+$3+$4}' file
A 25 27 50 102
B 35 37 75 147
C 75 78 80 233
D 99 88 76 263
234 230 281

답변3

사용행복하다(이전 Perl_6)

~$ raku -e 'my @a = lines; put( $_, .words.skip.sum) for @a; #rowsums \
           [Z] @a.map(*.words) andthen .skip.map(*.sum).put; #colsums'   file

입력 예:

A 25 27 50 
B 35 37 75 
C 75 78 80 
D 99 88 76

예제 출력:

A 25 27 50 102
B 35 37 75 147
C 75 78 80 233
D 99 88 76 263
234 230 281

첫 번째 ;세미콜론으로 구분된 명령문 에서 배열은 줄 바꿈을 제거하는 Raku의 루틴 autochomps를 @a읽어서 생성됩니다 . 두 번째 명령문에서 배열은 접미사 형식을 사용하여 반복됩니다 . topic 은 주제 변수이고, 공백으로 구분된 (즉, 열)이 행 단위로 이루어졌음 을 나타내는 -med 가 뒤따르고, 첫 번째(문자) 열을 -ping합니다. . (이 행의 합은 마지막 열과 같습니다. 참고로 기본값은 에 표시된 대로 하나의 행/요소 등 매개변수입니다 .)lineslines\n@afor @aput$_words.skip.sumwordssumskipputskipskip(1)

세 번째 명령문에서는 배열 요소를 꺼내서 결합하여 @a배열을 재배열합니다 . 기본적으로 이는 행과 열을 바꾸는 R의 변환 함수와 동일합니다. 거기에서 Raku의 제어 단어는 첫 번째 요소(문자 행) -ped, 나머지 행 -med 및 마지막 행(열 합계)을 사용하여 테마 변수를 다시 로드하는 데 사용됩니다.[Z]word@at()andthen$_$_A B C Dskipsumput

https://raku.org

관련 정보