Como eu mantenho variáveis awk no escopo?

1

Estou tentando acompanhar os valores mais baixos / mais altos de uma lista de condados e populações. Não consigo descobrir como impedir que as variáveis sejam redefinidas em 0.

Este é o meu arquivo 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
}

A saída de END sempre mostra o último município a ser analisado, em vez de acompanhar o maior ou o menor.

    
por I'm a noob 17.11.2015 / 06:34

1 resposta

1

Para esclarecer o que os comentadores observaram no código:

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
}

Você está misturando o Bash como a sintaxe da variável e o awk.

Bash:

variable='something'
echo $something

awk:

variable="something"
print variable

o awk usa $ para as variáveis de campo, como $ 1, $ 2, $ 0, $ NF, mas NÃO para as variáveis que você criou. Eu acho que é mais ou menos certo tecnicamente, embora eu tenha que admitir que nunca li sobre os detalhes.

atribuição de variável

    
por 17.11.2015 / 07:55

Tags