WhenAreTheFieldsSet

Basically, you should set FS before it may be called upon to split $0 into fields. Once awk encounters a `{', it is probably too late.

Some awk implementations set the fields at the beginning of the block, and don't re-parse just because you changed FS. To get the desired behavior, you must set FS _before_ reading in a line.

e.g.,

  BEGIN { FS=":" }
  { print $1 }

e.g.,

  awk -F: '{ print $1 }'

if you run code like this

  { FS=":"; print $1 }

on this data:

  first:second:third but not last:fourth
  First:Second:Third But Not Last:Fourth
  FIRST:SECOND:THIRD BUT NOT LAST:FOURTH

you may get either:

  this:       or this:
  ----        -------
  first       first:second:third
  First       First
  FIRST       FIRST

perhaps more surprisingly, code like

  { FS=":"; }
  { print $1; }

will also behave in the same way.