【Linux】gawk编辑器二

一、变量

gawk编程语言支持两种变量:内建变量和自定义变量。

1、内建变量

gawk使用内建变量来引用一些特殊的功能。

字段和记录分隔符变量

数据字段变量

此变量允许使用美元符号($)和字段在记录中的位置值来引用对应的字段。要引用记录中的第一个数据字段,就用变量 $1,要引用第二个数据字段,就用变量 $2,以此类推。

数据字段由字段分隔符划定。默认情况下,字段分隔符是一个空白字符:空格制表符。可以通过使用命令行选项 -F ,或者使用特殊的内建变量 FS 修改字段分隔符。

gawk数据字段和记录变量
FIELDWIDTHS 由空格分隔的一列数字,定义了每个数据字段的确切宽度
FS 输入字段分隔符
RS 输入记录分隔符
OFS 输出字段分隔符
ORS 输出记录分隔符

 默认情况下,gawk会将OFS变量的值设置为一个空格。print命令会自动将OFS变量的值置于输出的每个字段之间。

gawk 'BEGIN{FS=","} {print $1,$2,$3}' test2.txt

可以通过设置0FS变量,可以在输出中用任意字符串来分隔字段。

gawk 'BEGIN{FS=","; OFS="*"} {print $1,$2,$3}' test2.txt

 FIELDWIDTHS变量可以不通过字段分隔符读取记录。一旦设置了此变量,gawk就会忽略FS变量,并根据提供的字段宽度计算字段。

gawk 'BEGIN{FIELDWIDTHS="2 4 5 3"} {print $1,$2,$3,$4}' test3.txt

变量RSORS定义了gawk对数据流中记录的处理方式。默认情况下,gawk会将RS和ORS设置为换行符。

默认的RS值表明,输入数据流中的每行文本就是一条记录。

 包含地址和电话号码的数据中,占据了多行

可以把FS变量设置成换行符,这样就表明数据流中的每一行都是一个单独的字段,行内的所有数据都属于同一个数据字段。同时把RS变量设置成空字符串,然后在数据记录之间留一个空行。gawk就会把每一个空行视为记录分隔符。

 gawk 'BEGIN{FS="\n"; RS=""} {print $1,$3}' test3.txt

gawk将文件中的每一行都视为一个字段,同时将空行作为记录分隔符。 

 数据变量

ENVIRON变量使用关联数组来提取shell环境变量,其中关联数组用文本而非数值作为数组索引。

如下所示,可以用这种方法从shell中提取任何环境变量的值,以供gawk脚本使用。

gawk '
BEGIN{
print ENVIRON["HOME"]
print ENVIRON["PATH"]
}'

 变量FNR、NF和NR用于在gawk脚本中跟踪数据字段和记录。

变量NF可以让用户在不知道具体位置的情况下引用记录中的最后一个数据字段。NF变量含有数据文件中的最后一个字段的编号,在其前面加上美元符号,就把它用作字段变量。

gawk 'BEGIN{FS=":" ; OFS=":"} {print $1,$NF}' /etc/passwd

gawk 'BEGIN{FS=":" ; OFS=":"} {$NF}' /etc/passwd

注意看执行两条命令后打印出来的区别之处。 

 FNR变量包含当前数据文件中已处理过的记录数,NR变量包含已处理过的记录总数。

gawk 'BEGIN{FS=","}{print $1, "FNR="FNR}' test2.txt test2.txt

上述gawk脚本在命令行中指定了两个输入文件(都是test2.txt),此脚本会打印第一个字段和FNR变量的当前值。 

gawk 'BEGIN{FS=","}{print $1, "FNR="FNR, "NR="NR}
END{print "这儿总共有",NR,"条记录被处理了"}'' test2.txt test2.txt

 在gawk处理第二个数据文件时,FNR变量的值被重置了,而NR变量则继续计数。

 因此,如果只使用一个数据文件作为输入,那么FNR和NR的值是相同的;如果使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值