왜 삼중 인쇄인가?

왜 삼중 인쇄인가?

나는 같은 줄을 여러 번 인쇄하는 이 스크립트를 작성했습니다. 한 번만 인쇄하고 싶다면 어떻게 해야 합니까?

BEGIN {print "Average of salary"}
cnt=cnt+1
total=total+$3
avg=total/cnt
END {printf "Number of records:%d avg is:%d",cnt,avg}

답변1

문제는 아래와 같이 아래 코드를 중괄호로 묶지 않고 awkTrue 문을 충족하고 읽는 모든 줄을 인쇄한다는 것입니다.

{
    cnt=cnt+1
    total=total+$3
    avg=total/cnt
}

하지만 다음과 같이 할 수 있습니다.

awk '{ avg=(total+=$3)/NR } END{ print "...", NR, avg }' <infile

이 값은 입력 파일에서 읽은 모든 레코드/라인에서 증가합니다 NR.awk모든 줄을 읽고 그 값은 NR마지막 줄의 줄 번호입니다(기본적으로 다음을 가리킵니다.오른쪽에코코드질소숫자)

답변2

당신은 거의 성공했습니다.

예를 들어 계산된 줄을 {}로 묶습니다.

BEGIN { ...}
{ compute goes here}
END { printf "..."}

왜 삼중 인쇄인가?

이와 같은 모든 할당은 foo=$3+fooawk의 활성 테스트이며 기본 작업은 해당 줄을 인쇄하는 것입니다.

END(그런데, 절의 평균 만 계산하면 됩니다 )

관련 정보