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
块内的标头。 BEGIN
或 END
块内的多个命令用分号分隔。
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