Linux高级文本处理之gawk内置变量

一、FS –输入字段分隔符

FS是awk内置变量,用来制定行分隔符,功能能-F一样,区别在于FS只能用在BEGIN语句块当中,命令格式如下:

BEGIN{FS="SEPARATOR"}

实例1:

[root@localhost ~]# awk 'BEGIN { FS=",";\  print "---------------------------\nName\tTitle\n------------------------"}\  {print $2,"\t",$3;}\   END {print "-----------------------------------------"}' emp  --------------------------- Name    Title ------------------------ John Doe         CEO Jason Smith      IT Manager Raj Reddy        Sysadmin Anand Ram        Developer Jane Miller      Sales Manager -----------------------------------------

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

当遇到一个包含多个字段分隔符的文件时,你可以使用正则表达式来指定多个字段分隔符,如 FS = "[,:%]" 指定字段分隔符可以是逗号 ,或者分号 : 或者百分号 % 。

实例2:

[root@localhost ~]# cat emp1 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 [root@localhost ~]# awk 'BEGIN{FS="[,:%]"}{print $2,"\t",$3}' emp1 #使用正则表达式匹配 John Doe         CEO Jason Smith      IT Manager Raj Reddy        Sysadmin Anand Ram        Developer Jane Miller      Sales Manager 二、OFS – 输出字段分隔符

FS 是输入字段分隔符,OFS 是输出字段分隔符。OFS 会被打印在输出行的连续的字段之间。 默认情况下,awk 在输出字段中间以空格分开。

实例1:

[root@localhost ~]# awk 'BEGIN{FS=",";OFS=":"}{print $2,$3}' emp      John Doe:CEO Jason Smith:IT Manager Raj Reddy:Sysadmin Anand Ram:Developer Jane Miller:Sales Manager

注意与下面情况区分,如下情况会多输出空格字符:

[root@localhost ~]# awk -F, '{print $2,":",$3}' emp John Doe : CEO Jason Smith : IT Manager Raj Reddy : Sysadmin Anand Ram : Developer Jane Miller : Sales Manager

实例3:使用逗号与不使用逗号的区别

[root@localhost ~]# awk 'BEGIN{print "text1","text2"}' #使用逗号默认使用OFS text1 text2 [root@localhost ~]# awk 'BEGIN{print "text1""text2"}'  #不使用逗号默认不使用OFS text1text2 三、RS – 记录分隔符

Awk 默认的记录分隔符是换行符。

实例1:将文件emp2内容作为 5 行记录来处理(而不是单独的一行), 并且打印每条记录中雇员的姓名

[root@localhost ~]# cat emp2 101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand Ram:105,Jane, Miller [root@localhost ~]# awk -F, 'BEGIN{RS=":"}{print $2}' emp2 #将冒号结尾当做一行处理 John Doe Jason Smith Raj Reddy Anand Ram Jane

实例2:打印emp3文件中雇员名称和职位

[root@localhost ~]# cat emp3 101 John Doe CEO - 102 Jason Smith IT Manager - 103 Raj Reddy Sysadmin - 104 Anand Ram Developer - 105 Jane Miller Sales Manager [root@localhost ~]# awk 'BEGIN{RS="-\n";FS="\n"}{print $2,$3}' emp3  John Doe CEO Jason Smith IT Manager Raj Reddy Sysadmin Anand Ram Developer Jane Miller Sales Manager 四、ORS – 输出记录分隔符

ORS 是输出字段分隔符,默认输出字段分隔符为换行。

实例1:在每个输出行后面追加"---------"

[root@localhost ~]# cat emp 101,John Doe,CEO 102,Jason Smith,IT Manager 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager    [root@localhost ~]# awk 'BEGIN{FS=",";ORS="\n---------\n"}{print $2,$3}' emp John Doe CEO --------- Jason Smith IT Manager --------- Raj Reddy Sysadmin --------- Anand Ram Developer --------- Jane Miller Sales Manager ---------

实例2:把每个字段打印成单独一行,每条记录用”---“分隔

[root@localhost ~]# awk 'BEGIN{FS=",";OFS="\n";ORS="\n---\n"}{print $1,$2,$3}' emp 101 John Doe CEO --- 102 Jason Smith IT Manager --- 103 Raj Reddy Sysadmin --- 104 Anand Ram Developer --- 105 Jane Miller Sales Manager --- 五、NR – 记录序号

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14368.html