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动作的每一部分用逗号隔开.
|