awk 변수를 범위 내에 유지하는 방법은 무엇입니까?

awk 변수를 범위 내에 유지하는 방법은 무엇입니까?

카운티 및 인구 목록에서 가장 낮은/가장 높은 값을 추적하려고 합니다. 변수가 0으로 재설정되는 것을 중지하는 방법을 모르겠습니다.

이것은 내 cmd.awk 파일입니다.

BEGIN {
    FS="\t"
    HPD=0
    HPDname=""
    LPD=0
    LPDname=""
    HPW=0
    HPWname=""
    LPW=0
    LPWname=""
}
# Stuff in here needs to be printed during the process.
{
  print $1
  PD=$2/$4
  print PD
  PW=($3/($3+$4))*100
  print PW

# These if statements see if there is a new highest or lowest value for the     categories.
  if ($PD>$HPD)
  {
    HPD=$PD
    HPDname=$1
  }
  if ($PD<$LPD)
  {
    LPD=$PD
    LPDname=$1
  }
  if ($PW>$HPW)
  {
    HPW=$PW
    HPWname=$1
  }
  if ($PW<$LPW)
  {
    LPW=$PW
    LPWname=$1
  }
}

# Prints off all of the ending information that we have been keeping track      of.
END {
    print "The highest population density: "$HPDname" "$HPD
    print "The lowest population density: "$LPDname" "$LPD
    print "The highest percentage of water: "$HPWname" "$HPW
    print "The lowest percentage of water: "$LPWname" "$LPW
}

END의 출력에는 최고 또는 최저를 추적하는 대신 항상 분석할 마지막 카운티가 표시됩니다.

답변1

주석 작성자가 코드에서 지적한 내용을 명확히 하려면 다음을 수행하세요.

BEGIN {
    FS="\t"
    HPD=0
    HPDname=""
    LPD=0
    LPDname=""
    HPW=0
    HPWname=""
    LPW=0
    LPWname=""
}
# Stuff in here needs to be printed during the process.
{
  print $1
  PD=$2/$4
  print PD
  PW=($3/($3+$4))*100
  print PW

# These if statements see if there is a new highest or lowest value for the     categories.
  if (PD>HPD)
  {
    HPD=PD
    HPDname=$1
  }
  if (PD<LPD)
  {
    LPD=PD
    LPDname=$1
  }
  if (PW>HPW)
  {
    HPW=PW
    HPWname=$1
  }
  if (PW<LPW)
  {
    LPW=PW
    LPWname=$1
  }
}

# Prints off all of the ending information that we have been keeping track      of.
END {
    print "The highest population density: "HPDname" "HPD
    print "The lowest population density: "LPDname" "LPD
    print "The highest percentage of water: "HPWname" "HPW
    print "The lowest percentage of water: "LPWname" "LPW
}

Bash와 유사한 변수 구문을 awk와 혼동하고 있습니다.

큰 타격:

variable='something'
echo $something

이상한:

variable="something"
print variable

awk는 $1, $2, $0, $NF와 같은 필드 변수에 $를 사용하지만 사용자가 생성한 변수에는 사용하지 않습니다. 나는 이것이 기술적으로 다소 정확하다고 생각하지만, 구체적인 내용을 읽은 적이 없다는 것을 인정해야 합니다.

변수 할당

관련 정보