gawk: Field Splitting Summary
4.5.6 Field-Splitting Summary
-----------------------------
It is important to remember that when you assign a string constant as
the value of 'FS', it undergoes normal 'awk' string processing. For
example, with Unix 'awk' and 'gawk', the assignment 'FS = "\.."' assigns
the character string '".."' to 'FS' (the backslash is stripped). This
creates a regexp meaning "fields are separated by occurrences of any two
characters." If instead you want fields to be separated by a literal
period followed by any single character, use 'FS = "\\.."'.
The following list summarizes how fields are split, based on the
value of 'FS' ('==' means "is equal to"):
'FS == " "'
Fields are separated by runs of whitespace. Leading and trailing
whitespace are ignored. This is the default.
'FS == ANY OTHER SINGLE CHARACTER'
Fields are separated by each occurrence of the character. Multiple
successive occurrences delimit empty fields, as do leading and
trailing occurrences. The character can even be a regexp
metacharacter; it does not need to be escaped.
'FS == REGEXP'
Fields are separated by occurrences of characters that match
REGEXP. Leading and trailing matches of REGEXP delimit empty
fields.
'FS == ""'
Each individual character in the record becomes a separate field.
(This is a common extension; it is not specified by the POSIX
standard.)
'FS' and 'IGNORECASE'
The 'IGNORECASE' variable (User-modified) affects field
splitting _only_ when the value of 'FS' is a regexp. It has no effect
when 'FS' is a single character, even if that character is a letter.
Thus, in the following code:
FS = "c"
IGNORECASE = 1
$0 = "aCa"
print $1
The output is 'aCa'. If you really want to split fields on an
alphabetic character while ignoring case, use a regexp that will do it
for you (e.g., 'FS = "[c]"'). In this case, 'IGNORECASE' will take
effect.