awk

FS-输入字段分隔符

默认字段分隔符awk公认的是空格,如果输入文件定界符使用其他的,你已经知道你可以指定输入字段分隔符,在awk命令行使用选项-F,显示如下:

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

你也可以做同样的事情使用FS(字段分隔符)awk内置变量。你必须指定FS在BEGIN块里面,显示如下:

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

你可以在BEGIN块有多个awk语句。在下面例子的BEGIN里边,我们有FS和一个打印命令去打印header。在BEGIN或END块里多个命令用分号隔开

$ awk 'BEGIN{FS=",";print "——————\nName\tTitle\n——————"}{print $2,"\t",$3;}END{print "——————"}' employee.txt
——————
Name    Title
——————
John Doe      CEO
Jason Smith      IT Manager
Raj Reddy      Sysadmin
Anand Ram      Developer
Jane Miller      Sales Manager
——————

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

下面employee-multiple-fs.txt文件包含三个不同的字段分隔符在每条记录里: 1. ,逗号是字段分隔在emp id后面

2. :冒号是name字段后面的分隔符

3. %百分号是title后面的字段分隔符

创建文件:

$ vi employee-multiple-fs.txt
101,John Done: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 Done CEO
Jason Smith IT Manager
Raj Reddy Sysadmin
Anand Ram Developer
Jane Miller Sales Manager