大夏shell编程学习笔记(7)

高级gawk编程

①使用变量
★ 内置变量
★ 用户定义变量

变量描述
FIELDWIDTHS以空格分隔字符,用空格定义每个数据从字段的长度
FS输入字段分隔符号(原文本中把什么符号当做字段的分隔)
RS输入记录分隔符号(原文本中把什么符号当做一条记录的分隔)
OFS输出字段分隔符号(输出时显示什么符号当做字段的分隔)
ORS输出记录分隔符号(输出时显示什么符号当做一条记录的分隔)
ARGC出现的命令行参数的个数
ARGV命令行参数数组
FNR数据文件当前的记录号
NR已处理的输入记录个数
NF最后一个数据字段

例子:

$ cat data1
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35

$ gawk '
> BEGIN {FS=","}
> {print $1,"FNR"="FNR,"NR="NR}
> END{print NR}' data1 data1
data11 FNR=1 NR=1
data21 FNR=2 NR=2
data31 FNR=3 NR=3
data11 FNR=1 NR=4
data21 FNR=2 NR=5
data31 FNR=3 NR=6
6

用户定义的变量需要注意:
★ 不能以数字开头
★ 变量名区分大小写
★ 不需要使用取址符号,直接使用变量名
★ 用 -f 在命令行上设置gawk程序的变量值,用 -v 在命令行上设置gawk程序中BEGIN中的值
例子:

$ cat script
BEGIN{print n}
{print $n}

$ gawk -f script n=3 data1
data13
data23
data33

$ gawk -v script n=3 data1
3
data13
data23
data33

②数组
gawk使用关联数组。格式为:

var[index] = element

var是变量名,index是关联数组的索引值,element是数据元素值,在引用数组变量时,必须包括索引值才能检索相应的数据元素值。

为了方便提取索引值,可以采用for语句:

forvar in array{
statements
}

var每次取到的值就是数组array的索引值。

删除数组:

delete array[index]

③使用模式
匹配操作符(~)
例子:

$1 ~ /^data/    #搜索第二个数据段以data开头的记录
$1 ! ~ /^data/  #搜索第二个数据段不是以data开头的记录

`④用户自定义函数
要使用自定函数,格式为:

function name([variable])
{
   statements
}

使用自己的函数,例子:

$ gawk '
> function my()
> {
> printf $1
> }
> BEGIN{FS="\n"; RS=""}
> {
> my()
> }' data1

创建函数库
★ 注意在使用时候要包含函数库即可,如下:

$ gawk -f funclib -f script4 data2  #funclib为定义的函数库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值