gawk详解(二)

1)改变字段分隔符
gawk中,缺省的字段分隔符一般是空格符或TAB。也可以在命令行使用-F选项改变字符分隔符,只需在-F后面跟着你想用的分隔符即可。
例如:gawk -F";"'/root/ {print}' /etc/passwd
2)简单的正则表达式
gawk语言在格式匹配时符合正则表达式。
^ 表示字段的开始。
例如:$3 ~ /^b/    如果第三个字段以字符b开始,则匹配。
$ 表示字段的结束。例如:$3 ~ /b$/    如果第三个字段以字符b结束,则匹配。
. 表示和任何单字符m匹配。例如:$3 ~ /i.m/    如果第三个字段有字符i,则匹配。
| 表示“或”。例如:/cat | CAT/    和cat 或CAT字符匹配。
* 表示字符的零到多次重复。例如:/UNI*X/    和U N X、U N I X、U N I I X、U N I I I X等匹配。
+ 表示字符的一次到多次重复。例如:/UNI+X/    和U N I X、U N I I X等匹配。
/{a,b/} 表示字符a次到b次之间的重复。例如:/ U N I / { 1,3 / } X    和U N I X、U N I I X和U N I I I X匹配(其中的“/”为转义标记)。
? 表示字符零次和一次的重复。例如:/UNI?X/    和UNX 和UNIX匹配。
[] 表示字符的范围。例如:/I[BDG]M/    和IBM、IDM和IGM匹配。
[^] 表示不在[]中的字符。例如:/I[^DE]M/    和所有的以I开始、M结束的包括三个字符的字符串匹配,除了IDM和IEM之外。
3)BEGIN和END
BEGIN模式用来指明gawk开始处理一个文件之前执行一些动作。BEGIN经常用来初始化数值,设置参数等。
END模式用来在文件处理完成后执行一些指令,一般用作总结或注释。
BEGIN和END中所有要执行的指令都应该用花括号括起来。BEGIN和END必须使用大写。
例如:
    BEGIN { print "Starting the process the file" }
    $1 == "UNIX" {print}
    $2 > 10 {printf "This line has a value of %d",$2 }
    END { print "Finished processing the file. Bye!"}
4)变量
在gawk中,可以用等号"="给一个变量赋值,变量不用事先声明。
变量可以和字段和数值一起使用。
变量也可以作为格式的一部分使用。
内置变量
gawk中有几个十分有用的内置变量:
NR 已经读取过的记录数。
FNR 从当前文件中读出的记录数。
FILENAME输入文件的名字。
FS 字段分隔符(缺省为空格)。
RS 记录分隔符(缺省为换行)。
OFMT 数字的输出格式(缺省为%g)。
OFS 输出字段分隔符。
ORS 输出记录分隔符。
NF 当前记录中的字段数。
5)控制结构
if表达式:
if 表达式的语法:
if (expression){    动作的每一部分用逗号隔开。
commands
}
else{
commands
}
while循环
while 循环的语法:
while (expression){
commands
}
for循环
for 循环的语法如下:
for (initialization; expression; increment) {
commands
}
next和exit
next指令用来告诉gawk处理文件中的下一个记录,而不管现在正在做什么,类似于C中的continue。
gawk运行到exit指令后,就转到程序的末尾去执行END,如果有END的话。
6)数组
gawk语言支持数组结构。数组不必事先初始化。声明一个数组的方法如下:
arrayname[num] = value
请看下面的例子:
#将文件中的行逆向输出
{line[NR] = $0 } # remember each line
END {var=NR # output lines in reverse order
while (var > 0){
print line[var]
var--
}
}
7)自定义函数
复杂的gawk程序常常可以使用自己定义的函数来简化。
调用用户自定义函数与调用内部函数的方法一样。
函数的定义可以放在gawk 程序的任何地方。
用户自定义函数的格式:
function name (parameter-list) {
body-of-function
}

注意:awk只能处理文本文件,如果不是文件的话,可以通过管道或是其他重定向方式将数据递交给awk。
print动作的每一部分用逗号隔开。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值