카운티 및 인구 목록에서 가장 낮은/가장 높은 값을 추적하려고 합니다. 변수가 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와 같은 필드 변수에 $를 사용하지만 사용자가 생성한 변수에는 사용하지 않습니다. 나는 이것이 기술적으로 다소 정확하다고 생각하지만, 구체적인 내용을 읽은 적이 없다는 것을 인정해야 합니다.