awk에는 파이프로 연결되는 파일의 모든 열을 합산하는 다음 스크립트가 있습니다.
#sum_all.awk
{ for (i=1; i<=NF; i++) { sum[i]+= $i } }
END { for (i=1; i<=NF; i++ ) { printf "%d ", sum[i] } }
예를 들어:cat my_file.txt | awk -f sum_all.awk
그리고 my_file.txt
:
5 7 8
1 0 2
산출:
6 7 10 %
마지막 문자를 어떻게 제거할 수 있나요 %
?
답변1
END { for (i=1; i<=NF; i++ ) { printf "%d ", sum[i] } ; print "" }
답변2
~처럼manatwork님이 댓글을 작성했습니다.는 %
awk 출력의 일부가 아니며 쉘의 다음 프롬프트입니다. 이 END
블록에는 이 입력 파일에 대한 3개의 쌍이 있습니다 printf
. 첫 번째 출력 6
과 공백, 두 번째 출력 7
과 공백, 세 번째 출력 10
과 공백입니다. 그런 다음 awk가 종료되고 쉘이 프롬프트를 인쇄합니다.
명령이 줄 바꿈으로 끝나지 않는 일부 출력을 인쇄하는 경우(또는 더 일반적으로 줄 시작 부분에 커서를 두지 않는 경우) 쉘 구성에 따라 쉘은 다음과 같은 줄에 있게 됩니다. 그렇지 않으면 쉘이 종료되지 않은 줄이 제거되고 해당 프롬프트가 줄의 시작 부분에 인쇄됩니다.
명령의 출력이 완전히 표시되도록 하려면 명령이 출력을 생성하지 않는 한 새 줄로 끝나는지 확인하십시오. Unix 시스템에서 비어 있지 않은 텍스트 파일은 항상 개행 문자로 끝나는데, 그 이유는 텍스트 파일이 일련의 (아마도 비어 있는) 줄로 구성되어 있고, 각 줄은 개행 문자(및 null)가 아닌 일련의 (아마도 비어 있는) 줄로 구성되어 있기 때문입니다. . 문자는 바이트를 형성합니다). 대부분의 유틸리티는 주로 텍스트 파일을 처리하도록 설계되는 경향이 있으므로 명령 출력이 유효한 텍스트 파일인지 확인하십시오.
필드를 인쇄한 후 a "\n"
(awk의 개행 문자 표현)를 인쇄하거나 print
텍스트를 인쇄한 후 개행 문자를 추가하는 이 함수를 호출하세요.
END { for (i=1; i<=NF; i++) printf "%d ", sum[i]; print ""; }
또는 줄 끝에 추가 공백을 방지하려면 다음을 수행하세요.
END { for (i=1; i<NF; i++) printf "%d ", sum[i]; printf "%d\n", sum[NF]; }
또는
END { printf "%d"; for (i=2; i<=NF; i++) printf " %d", sum[i]; print ""; }
또는
END { for (i=1; i<NF; i++ ) printf "%d%s", sum[i], (i==NR ? "\n" : " "); }