2

Why do I get only "cat" when I run

awk 'BEGIN {
  animal[three] = "hen"
  animal[two]   = "dog"
  animal[one]   = "cat"
  for (var in animal) {
    print animal[var]
  }
}

??

Shouldn't it print "hen", "dog" and "cat"?

1
  • Missing a ' at the end of the code.
    – fedorqui
    Apr 10, 2014 at 8:28

1 Answer 1

4

Indices to awk arrays can either be numeric (as in a traditional array) or strings (an associative array). So you can either do

animal[1] = "cat"

or

animal["one"] = cat

However, if you do

animal[one] = cat

awk will try to find a variable called 'one', fail, and effectively do this:

animal[""] = cat

So in your program, all three animals are assigned to animal[""], so you end up with only one element in your array.

If you put one, two and three in quotes, your code will work as you expect.

1
  • 1
    Good one! You can also indicate by printing print animal[var], "-"var"-". var is empty, - to show where it starts and where it ends.
    – fedorqui
    Apr 10, 2014 at 8:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .