awk 파일을 만들 때 열 내 범위를 지정하는 방법은 무엇입니까?

awk 파일을 만들 때 열 내 범위를 지정하는 방법은 무엇입니까?

이런 데이터 파일이 있는데 awk파일을 만들어 정리하고 싶습니다. 특정 연령대의 평균 비율을 구하고 싶습니다. 예를 들어, 10<age<2020<age<30. 이 사람들의 평균을 계산할 방법을 찾을 수 없습니다. 어떻게 해야 하나요?

name rate hours age sex
AIDAN 3.5 19 22 M
AMELIA 5.25 16 13 F
NOAH 4.5 24 25 M
ISABELLA 4.25 17 15 F
LIAM 4.5 23 23 M
AVA 5.5 24 25 F
CAYDEN 6 21 28 M

답변1

질문을 이해했는지 잘 모르겠습니다. 두 가지 결과를 얻고 싶나요?

분명하지 않다면아케마의 대답여러 통계를 수집하도록 확장할 수 있습니다.

awk '($4 > 10) && ($4 < 20) { c10++; s10+=$2; }
     ($4 > 20) && ($4 < 30) { c20++; s20+=$2; }
     END { if (c10>0) print "average for 10-20:", s10/c10
           if (c20>0) print "average for 20-30:", s20/c20 }' …
  • 물론 변수를 초기화하는 것은 좋은 프로그래밍 습관입니다. 그러나 awk변수를 null로 초기화하는 것은 수학적 맥락에서 사용될 때 0처럼 작동하므로 실제로는 필요하지 않습니다.
  • Archemar가 지적했듯이 printf. 그러나 awk기본값(즉, print명령문을 구현하는 방법)은 합리적입니다.
  • Archemar가 지적했듯이 범위 내에 아무도 없을 때(단지뿐만 아니라)아니요보고된 평균).

답변2

행 선택$4 < 20 && $4 > 10

awk 'BEGIN { c=0 ; s=0 ; }
     ($4 < 20) && ($4 > 10) { c++ ; s+=$2 ; }
     END { if (c>0 ) printf "average %.1f\n",s/c ;}' ...

행을 선택하지 않으면 오류 메시지가 표시됩니다.

답변3

awk '{if ($4>=10&&$4<=20) {X=X+1;Y=Y+$2}} END {print Y/X}' < 파일

관련 정보