输入字段分隔符:awk的内置变量FS中保存了输入字段分隔符的值。使用FS的默认值时,awk用空格或制表符来分隔字段,并且删除各字段前多余的空格或制表符。可以通过在BEGIN语句中或命令行上赋值来改变FS的值。接下来我们就要在命令行上给FS指定一个新的值。在命令行上改变FS的值需要使用-F选项,后面指定代表新分隔符的字符。
从命令行改变字段分隔符:范例中演示了如何使用-F选项在命令行中改变输入字段分隔符。
Tom Jones: 4424: 5 / 12 / 66: 543354
Mary Adams: 5346: 11 / 4 / 63: 28765
Sally Chang: 1654: 7 / 22 / 54: 650000
Billy Black: 1683: 9 / 23 / 44: 336500
Tom Jones 4424
说明:-F选项用来在命令行重新设置输入字段分隔符的值。当冒号紧跟在-F选项的后面时,awk 就会在文件中查找冒号,用以分隔字段。
使用多个字段分隔符:你可以指定多个输入字段分隔符。如果有多个字符被用于字段分隔符FS,则FS对应是一个正则表达式字符串,并且被括在方括号中。下面的范例中,字段分隔符是空格、冒号或制表符。
Tom Jones 4424
Mary Adams 5346
Sally Chang 1654
Billy Black 1683
说明:-F选项后面跟了一个位于方括号中的正则表达式,当遇到空格、冒号或制表符时,awk会把它当成字段分隔符。这个表达式两头加了引号,这样就不会被shell当成自己的元字符来解释(注意, shell使用方括号来进行文件名扩展)。
输出字段分隔符:默认的输出字段分隔符是单个空格,被保存于awk的内置变量OFS中。此前的所有例子中,我们都是用print语句把输出打印到屏幕上。因此,无论OFS如何设置,print语句中用于分隔字段的逗号,在输出时都被转换成OFS的值。如果用OFS的默认值,则$1和$2之间的逗号会被转换为单个空格,print函数打印这两个字段时会在它们之间加一个空格。
如果没有用逗号来分隔字段,则输出结果中的字段将堆在一起。另外,OFS的值可以改变。