1 算术运算符
与其他程序语言基本相同,支持浮点数计算,x=5/2,print x直接输出计算结果
2 赋值运算符
= += -= *= /= %= ^=
3 条件运算符
expression?value1:value2
eg.
grade=($2>90?"A":"B")
print grade
4 逻辑运算符
&& || !
$2 > 80 && $3 > 80 && $4 > 80 && $5 >80 {
} // 输出所有的字段都大于80的记录
5 关系运算符
~ 匹配运算符 $1~/^T/表示匹配第1个字段以字符T开头的记录
!~ 不匹配运算符 $1!~/a/表示匹配第1个字段不含有字符a的记录
$1~/^K/ { print } 匹配第1个字段以字符K开头的记录
6 字符串函数
index(string1,string2)
定位string2在string1中出现的位置,如果出现多次,则返回第一次出现的位置。如果不包含string2,则返回0。区分大小写。
print index("Hello,world.","world") // 7
length(string)
返回值为整数,表示字符串string的长度
match(string,regexp)
其功能是在字符串string中搜索匹配正则表达式的子串。用户可以用RSTART和RLENGTH来获取相关的返回值。RSTRAT表示子串在父串中出现的位置,匹配不成功返回0。RLENGTH表示匹配到子串的长度,匹配不成功返回-1。
spilt(string,array,seperator)
将一个字符串根据指定的分隔符拆分成一个数组。第一个参数为要拆分的字符串,第2个参数用来储存拆分结果的数组,第3个参数用来指定分隔符,分隔符可以用正则表达式来表示。
eg.
string="5P12p89"
spilt(string,arr,/[Pp]/)
print arr[1]
print arr[2]
print arr[3]
// 结果:5 12 89
作为分隔符的字符并不出现在拆分结果中
sub(regexp,replacement,string)和gsub(regexp,replacement,string)
替换字符串中的子串,前者替换第一次出现的,后者替换所有
如果sub与gsub函数的第二个参数为空串,则表示将符合匹配规则的字符串删除
substr(string,start,[length])
截取指定长度的子串。第3个参数可以忽略,表示从开始位置一直截取到父串的末尾
通过match()和substr()可以将父串中全部符合规则的子串提取出来。
eg.
BEGIN {
pages="p12-p34 p56-p78"
while(match(pages,/[0-9]+/)>0) {
print substr(pages,RSTART,RLENGTH) #截取并输出匹配的子串
sub(/[0-9]+/,"",pages) #删除匹配的子串
}
}
7 算术函数
rand() 返回介于0与1之间的随机数
srand([x]) 以x为种子返回一个随机数
8 数组的定义和赋值
awk并没有提供数组定义的语句,当用户为数组第1个元素赋值时,awk便会自动创建该数组。
awk数组的下标从1开始计算,数组的第1个元素的下标为1。也支持关联数组,所谓关联数组,是指以字符串为下标的数组。
在定义数组时,用户并不需要指定数组的数据类型,实际上awk可以存储任何简单类型的数据,例如字符串、整数以及浮点数类型的数据。
赋值:
array[n]=value
引用:
array[n]
eg.
BEGIN {
arr[1]="tom"
arr[2]="john"
arr["a"]=12
arr[3]=3.1415
print arr[1],arr[2],arr["a"],arr[3]
}
9 遍历数组
数组的长度可以使用length()函数获得
当数组下标连续且是整数值作为下标,可以使用for循环进行遍历。如果下标是非连续的或者字符串,则不可以使用上述方法。
awk提供了一种更为便捷的机制来遍历数组元素:
for (n in array) {
print array[n]
}
在这种方法中,数组元素的下标默认是无序的,所以导致通过以上语句得到的数组元素也是无序的。
另外在for循环中,所输出的下标是用户定义时使用的下标,并没有转换成整数。
要按顺序遍历数组,必须使用下标来引用数组元素。
eg.
BEGIN {
arr[1]="tom"
arr[2]="john"
arr["a"]=12
arr[3]=3.1415
arr[4]=5
arr[99]=23
for(n in arr){
print arr[n]
}
}
// 结果:
5
12
23
tom
john
3.1415
print n:
4
a
99
1
2
3