substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
awk提供许多内建变量,都是大写名称,时常用到的几个有:
FILENAME 当前输入文件的名称
FNR 当前输入文件的记录数
FS 字段分隔字符(正则表达式)(默认为:" ")
NF 当前记录的字段数
NR 在工作中的记录数
OFS 输出字段分隔字符(默认为:" ")
ORS 输出记录分隔字符(默认为:"n")
RS 输入记录分隔字符(仅用于gawk与mawk里的正则表达式)(默认为:"n")
awk允许的测试:
x==y x等于y?
x!=y x不等于y?
x>y x大于y?
x>=y x大于或等于y?
x x<=y x小于或等于y?
x~re x匹配正则表达式re?
x!~re x不匹配正则表达式re?
awk的操作符
= 、+=、 -=、 *= 、/= 、 %=
|| && > >= < <= == != ~ !~
xy (字符串连结,'x''y'变成"xy")
+ - * / % ++ --
awk没有提供位操作符,但是提供了相关的函数:
and(v1, v2) Return the bitwise AND of the values provided by v1 and v2.
compl(val) Return the bitwise complement of val.
lshift(val, count) Return the value of val, shifted left by count bits.
or(v1, v2) Return the bitwise OR of the values provided by v1 and v2.
rshift(val, count) Return the value of val, shifted right by count bits.
xor(v1, v2) Return the bitwise XOR of the values provided by v1 and v2.
awk的数组变量允许数组名称之后,以方括号将任意数字或字符串表达式括起来作为索引。以任意值为索引的数组称之为关联数组。awk将应用于数组中,允许查找插入和删除等操作,在一定时间内完成,与存储多少项目无关。(说了这么多其实就是hash数组)。delete array[index]会从数组中删除元素。delete array删除整个数组。awk数组还可以这么用:
print maildrop[53, "Oak Lane", "T4Q 7XV"]
print maildrop["53" SUBSEP "Oak Lane" SUBSEP "T4Q 7XV"]
print maildrop["53 34Oak Lane", "T4Q 7XV"]
print maildrop["53 34Oak Lane 34T4Q 7XV"]
以上输出结果都是一样的。内建变量SUBSEP默认值是 34,可以更改它。如果稍后更改了SUBSEP的值,将会使已经存储数据的索引失效,所以SUBSEP其实应该在每个程序只设置一次,在BEGIN操作里。
awk对于命令行的自动化处理,意味着awk程序几乎不需要关心他们自己。awk通过内建变量ARGC(参数计数)与ARGV(参数向量,或参数值),让命令行参数可用。给出例子说明其用法:
$ cat >showargs.awk
BEGIN{
print "ARGC = ",ARGC
for ( k = 0 ; k < ARGC ; k++)
print "ARGV[" k "] = [" ARGV[k] "]"
}
$ awk -v One=1 -v Two=2 -f showargs.awk Three=3 file1 Four=4 file2 file3
ARGC = 6
ARGV[0] = [awk]
ARGV[1] = [Three=3]
ARGV[2] = [file1]










