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
processing. For example, with Unix
the assignment ‘
FS = "\.."’ assigns the character string
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
==’ 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.)
(see section Built-in Variables That Control
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"
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,
will take effect.