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"?

Thor
  • 6,573
anilomjf
  • 121

1 Answers1

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.

Flup
  • 3,601
  • 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 '14 at 08:29