Problem scenario
You have Awk 4.1.3 installed. The default field separator in awk is a space. You want to assign it to a different character -- specifically a colon ":". You have a string with a colon assigned to the variable "y". You have tried these things:
echo $y | awk -F ":" '/1/ {print $NF}' # this prints nothing
echo $y | awk '{FS=":"; print $1}' # this prints y
echo $y | awk 'BEGIN { FS=":" } /1/ { print $2}' # this prints nothing
The above commands do not recognize the ":" as the field separator. You think regular letters would have worked as a string, but you find the colon ":" to behave differently. What do you do to get a colon to be recognized as a separator of fields?
Solution
In some ways, this question for those Awk experts reading, is what is the functional difference between awk's "--field-separator" contrasted with Awk's "FS" reserved flag?
To find the version of awk use this command: awk -W version
. Be sure you have a new version (e.g., around 4.1.3). To upgrade on a Debian/Ubuntu server, run this: sudo apt-get -y upgrade gawk
For reasons we do not understand, use the unabbreviated "--field-separator" to assign the non-default character to. The behavior is different. We find the [more verbose] "--field-separator" works more reliably and predictably. Here is an example:
echo $y | awk --field-separator=":" '{print $1}'
(We know the awk command is technically a programming language that was an antecedent to Perl. Today awk is thought of chiefly as a Bash command or utility.)