56. 0FS - 输出字段分隔符
FS
用于输入字段分隔符。
OFS
用于输出字段分隔符。
OFS
在输出中的连续字段之间打印。
默认情况下,awk 打印输出字段,字段之间有空格。
IFS
作为输入字段分隔符,我们只是将其称为
FS
。
以下示例打印姓名和工资,两者之间有空格。 当您使用单个打印语句通过用,
分隔来打印两个变量时,它将打印用空格分隔的这两个变量的值。
$ awk -F ',' '{print $2, $3}' employee.txt
John Doe CEO
Jason Smith IT Manager
Raj Reddy Sysadmin
Anand Ram Developer
Jane Miller Sales Manager
如果您尝试在字段之间的打印语句中手动包含:
,则输出如下。
请注意冒号前后有一个额外的空格。 这是因为,awk 仍然使用空格作为输出字段分隔符。
下面的打印语句实际上打印三个值(用,
分隔)—— $2
、:
和 $4
。
正如您所知,当您使用一个打印语句打印多个值时,输出将在它们之间包含空格。
$ awk -F ',' '{print $2, ":", $3}' employee.txt
John Doe : CEO
Jason Smith : IT Manager
Raj Reddy : Sysadmin
Anand Ram : Developer
Jane Miller : Sales Manager
正确的方法是使用 awk 内置变量
OFS
(输出字段分隔符)。
请注意,本例中冒号前后没有空格,因为
OFS
替换了默认的 awk
OFS
(空格)与冒号。 下面的print
语句打印两个用逗号分隔的变量($2
和$4
),但是输出将用:
分隔它们(而不是空格),因为我们的
OFS
设置为:
。
$ awk -F ',' 'BEGIN { OFS=":" } \
{ print $2, $3 }' employee.txt
John Doe:CEO
Jason Smith:IT Manager
Raj Reddy:Sysadmin
Anand Ram:Developer
Jane Miller:Sales Manager
另请注意打印语句中包含逗号与不包含逗号之间的细微差别(打印多个变量时)。
当您在打印语句中的不同打印值之间指定逗号时,awk 将使用
OFS
。
在以下示例中,使用默认
OFS
,因此您将在输出中的值之间看到空格。
$ awk 'BEGIN { print "test1","test2" }'
test1 test2
当您在print
语句中不使用逗号分隔值时,awk 将不会使用
OFS
。
相反,它会打印中间没有任何内容的值。
$ awk 'BEGIN { print "test1" "test2" }'
test1test2