3 대신 n 열에 대해 awk '{print $1+$2+$3} file1 > file2를 어떻게 작성합니까?

3 대신 n 열에 대해 awk '{print $1+$2+$3} file1 > file2를 어떻게 작성합니까?
awk '{ for (i = 1; i <= NF; i++) sum[i]+=$i} END{for (i in sum) print sum[i]}' file1 > file2

이는 레코드별 합계에는 도움이 되지만 유사한 구성표는 열별 합계에는 도움이 되지 않습니다(아마도). n 열에 대한 열별 추가를 일반화하는 방법은 무엇입니까?

cat file1
23 46 45
45 57 58
56 78 74

cat file2
114
160
208

답변1

각 레코드의 필드 합계를 계산하려면 다음과 같이 하십시오.

awk '{sum = 0; for (i = 1; i <= NF; i++) sum += $i; print sum}' < file1 > file2

중괄호로 시작행동선행 없이 각 입력 행에서 실행되는 명령문입니다.상황이렇게 하면 실행이 다음을 만족하는 라인으로 제한됩니다.상황.

각 줄:

  1. 변수를 sum0으로 초기화합니다.
  2. 필드 #1에서 시작하여 마지막 필드(특수 변수)로 끝나며 NF해당 필드의 값( )만큼 증가하면서 필드를 반복합니다.sum$i
  3. 변수의 값을 인쇄합니다 sum.

답변2

이는 awk보다 약간 느리지만 매우 간결합니다.

perl -MList::Util=sum0 -lane 'print sum0(@F)' file1

그것은 사용한다sum0핵심 List::Util 모듈의 기능입니다.

관련 정보