디지털 테이블이 많아요. 다음은 단지 예입니다.
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합니다. . (이 행의 합은 마지막 열과 같습니다. 참고로 기본값은 에 표시된 대로 하나의 행/요소 등 매개변수입니다 .)lines
lines
\n
@a
for @a
put
$_
words.skip.sum
words
sum
skip
put
skip
skip(1)
세 번째 명령문에서는 배열 요소를 꺼내서 결합하여 @a
배열을 재배열합니다 . 기본적으로 이는 행과 열을 바꾸는 R의 변환 함수와 동일합니다. 거기에서 Raku의 제어 단어는 첫 번째 요소(문자 행) -ped, 나머지 행 -med 및 마지막 행(열 합계)을 사용하여 테마 변수를 다시 로드하는 데 사용됩니다.[Z]
word
@a
t()
andthen
$_
$_
A B C D
skip
sum
put