• 本页内容

55. FS - 输入字段分隔符


awk 识别的默认字段分隔符是空格。 如果输入文件中的记录由空格以外的任何内容分隔,您已经知道可以在 awk 命令行中使用选项 -F指定输入字段分隔符,如下所示。

awk -F ',' '{print $2, $3}' employee.txt

您还可以使用Awk 内置变量 FS (字段分隔符)执行相同操作。 您必须在 BEGIN 块中指定 FS ,如下所示。

awk 'BEGIN {FS=","} {print $2, $3}' employee.txt

BEGIN 块中可以有多个 awk 语句。 在下面的示例中,我们使用 FS 和打印命令来打印 BEGIN 块内的标头。 BEGINEND 块内的多个命令用分号分隔。

awk 'BEGIN { FS=","; \
print "-------------\nName\tTitle\n-------------" } \
{ print $2,"\t",$3; } \
END {print "-------------"}' employee.txt 

请注意,默认的字段分隔符不仅仅是一个空格。它实际上匹配一个或多个空白字符。

以下employee-multiple-fs.txt文件在每条记录中包含三个不同的字段分隔符:

  • ,逗号是雇员 id 后面的字段分隔符
  • :冒号是名称后的字段分隔符
  • %百分比是标题后的字段分隔符
$ vi employee-multiple-fs.txt
101,John Doe:CEO%10000
102,Jason Smith:IT Manager%5000
103,Raj Reddy:Sysadmin%4500
104,Anand Ram:Developer%4500
105,Jane Miller:Sales Manager%3000

当你遇到包含不同字段分隔符的文件时,别担心, FS 可以来拯救你。 您可以使用正则表达式指定多个字段分隔符。

例如FS = "[,:%]"表示字段分隔符可以是,:%

因此,以下示例将打印包含不同字段分隔符的employee-multiple-fs.txt文件中的姓名和职务。

$ awk 'BEGIN {FS="[,:%]"} {print $2, $3}' employee-multiple-fs.txt
John Doe CEO
Jason Smith IT Manager
Raj Reddy Sysadmin
Anand Ram Developer
Jane Miller Sales Manager