• 本页内容

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