CSV 파일이 있습니다.
country,gender,sport,height,weight,gold,silver
ESP,male,football,1.8,84,0,1
VEN,female,handball,1.6,59,1,0
ESP,male,athletics,1.7,65,0,0
키와 몸무게에 대한 최대값, 최소값, 평균값과 매개변수에 표시된 국가별, 성별별로 그룹화된 금은열의 합을 출력하는 스크립트를 awk를 이용하여 작성해야 합니다.
실행 시간:
gawk -f script3_4.awk -v sport=football sex=male athletes.csv
출력은 다음과 같아야 합니다.
country,gender,maxH,minH,avgH,maxW,minW,avgW,sum_medals
ESP,male,1.98,1.73,1.86,70,120,85,7
BRA,male,1.94,1.65,1.7,65,112,91,9
...
최소, 최대 및 평균을 계산하는 방법을 알고 있지만 awk를 처음 접하고 성별 및 국가별로 데이터를 그룹화하는 방법을 모릅니다.
누구든지 나를 도와줄 수 있나요?
답변1
이것은 숙제처럼 보이므로 완전한 답변은 제공하지 않고 팁과 부분적인 예만 제공하겠습니다.
각 국가별로 최대 및 최소 키와 몸무게, 총 누적 키와 몸무게, 총 누적 메달, 기록 수(나중에 평균을 계산할 수 있도록)를 추적하고 싶을 것입니다.
이렇게 하려면 여러 연관 배열(추적된 값마다 하나씩)을 사용하고 $1
(국가)를 배열 키로 사용합니다.
예를 들어:
if ($2 == gender && $3 == sport) {
count[$1]++;
medals[$1] += $6 + $7;
if ($4 > maxH[$1]) {maxH[$1] = $4};
if ($4 < minH[$1]) {minH[$1] = $4};
totalH[$1] += $4;
if ($5 > maxW[$1]) {maxW[$1] = $5};
if ($5 < minW[$1]) {minW[$1] = $5};
totalW[$1] += $5;
}
출력 단계와 평균 계산은 여러분에게 맡기겠습니다.
실제로 국가와 성별에 대한 서로 다른 값을 동시에 추적해야 하는 경우 일종의 다차원 배열을 사용할 수 있습니다.
gawk
배열의 배열이 지원되므로 기존 awk를 사용하는 것보다 쉽습니다(참조다차원 배열그리고배열의 배열)
예를 들어 국가( $1
) 및 성별( $2
)을 배열 차원의 키로 사용합니다.
if ($3 == sport) {
count[$1][$2]++;
medals[$1][$2] += $6 + $7;
if ($4 > maxH[$1][$2]) {maxH[$1][$2] = $4};
if ($4 < minH[$1][$2]) {minH[$1][$2] = $4};
totalH[$1][$2] += $4;
if ($5 > maxW[$1][$2]) {maxW[$1][$2] = $5};
if ($5 < minW[$1][$2]) {minW[$1][$2] = $5};
totalW[$1][$2] += $5;
}
마지막으로 스포츠, 국가, 성별별로 그룹화해야 하는 경우 $3
스포츠( )를 키로 하는 세 번째 배열 차원을 사용할 수 있습니다.