명령 줄 인수를 통해 모든 필드에서 평균을 계산하는 일반적인 AWK 스크립트

StackOverflow https://stackoverflow.com/questions/1434016

문제

파일과 필드 번호 (해당 파일에서)를 입력 할 수있는 일반적인 AWK 스크립트를 작성하고 해당 파일에서 해당 필드의 평균 값을 제공하고 싶습니다. 나는 다음과 같이 사용할 것입니다.

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

물론, 어떤 필드 (예 : 3 달러)를 알고 있다면 스크립트를 쓸 수 있습니다. 그것은 다음과 같은 것입니다 :

//{tot+=$3; count++}
END{
    print tot/count;
}

그러나 명령 줄 옵션을 통해 평균화하고 싶은 필드를 변경할 수 있기를 원합니다. 그게 가능합니까? 감사!

도움이 되었습니까?

해결책

이것은 당신이 원하는 것을 할 것입니다.

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6

다른 팁

{ tot += $field; count++ }
END { print tot/count }

전화처럼 전화하십시오awk -v field=3 -f avg.awk input.file

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top