나는 같은 줄을 여러 번 인쇄하는 이 스크립트를 작성했습니다. 한 번만 인쇄하고 싶다면 어떻게 해야 합니까?
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
문제는 아래와 같이 아래 코드를 중괄호로 묶지 않고 awk
True 문을 충족하고 읽는 모든 줄을 인쇄한다는 것입니다.
{
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+foo
awk의 활성 테스트이며 기본 작업은 해당 줄을 인쇄하는 것입니다.
END
(그런데, 절의 평균 만 계산하면 됩니다 )