SECTION 27 gawk进阶

gawk进阶

gawk编程语言支持两种类型变量:

内建变量
自定义变量

内建变量
1.字段和记录分隔符变量
gawk数据字段变量,以$和该字段在记录中的位置引用对应的字段,$1第一个数据字段,$2第二个数据字段
数据字段是由字段分隔符划定,默认是空白字符(空格和制表符),可以通过-F或FS更改字段分隔符
内建变量:

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

]# gawk 'BEGIN{FS=","}{print $1,$2,$3}' data1.txt 
data1 data2 data3
data1 data2 data3
data1 data2 data3
]# gawk 'BEGIN{FS=",";OFS="-"}{print $1,$2,$3}' data1.txt 
data1-data2-data3
data1-data2-data3
data1-data2-data3
]# gawk 'BEGIN{FIELDWIDTHS="3 5 2 6"}{print $1,$2,$3,$4}' data1.txt 
dat a1,da ta 2,data
dat a1,da ta 2,data
dat a1,da ta 2,data

RS把记录中的空行作为记录分隔符进行划分数据块,FS把换行符当作字段分隔符

]# cat data12.txt 
data1,data2,
data3,data4,data5

data1,data2,data3,
data4,data5

data1,
data2,data3,data4,data5
]# gawk 'BEGIN{FS="\n";RS="";OFS="-"}{print $1,$2}' data12.txt 
data1,data2,-data3,data4,data5
data1,data2,data3,-data4,data5
data1,-data2,data3,data4,data5

其他内建变量

变量 描述
ARGC 当前命令行参数个数
ARGV 包含命令行参数的数组
FILENAME 用作gawk输入数据的数据文件文件名
FNR 当前数据文件中的数据行数
NF 数据文件中的字段总数
NR 已处理的输入记录数
ENVIRON 当前shell环境变量及其值组成的关联数组

]# gawk 'BEGIN{print ARGC,ARGV[1]}' data12.txt 
2 data12.txt

ARGC包括命令本身和data12.txt,所以是两个参数,ARGV从0开始,0是命令本身,1是参数开始

]# gawk 'BEGIN{                                
print ENVIRON["HOME"]
print ENVIRON["PATH"]
}'
/root
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
]# gawk 'BEGIN{FS=":";OFS=":"}{print $1,$NF}' /etc/passwd
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin

$NF能够指定最后一个字段

]# gawk 'BEGIN{FS=","}{print $1,"FNR="FNR,"NR="NR}' data1.txt data1.txt 
data1 FNR=1 NR=1
data1 FNR=2 NR=2
data1 FNR=3 NR=3
data1 FNR=1 NR=4
data1 FNR=2 NR=5
data1 FNR=3 NR=6

自定义变量
自定义变量名以字母、数字和下划线组成,不能以数字开头

]# gawk 'BEGIN{
> test="this is testing"
> print test
> }'
this is testing

gawk编程语言包含了用来处理数字值的标准数字操作符
在命令行给变量赋值

]# cat data1.txt 
data1,data2,data3,data4,data5
data1,data2,data3,data4,data5
data1,data2,data3,data4,data5
[root@localhost day9]# vim script.gawk 
[root@localhost day9]# gawk -f script.gawk n=2 data1.txt 
data2
data2
data2

通过使用-v在BEGIN代码之前定义变量

]# gawk n=2 -f script.gawk data1.txt 
gawk: fatal: cannot open file `-f' for reading (No such file or directory)
[root@localhost day9]# gawk -v n=2 -f script.gawk data1.txt 
data2
data2
data2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值