文章目录
- 运算符
- 流程控制
- 函数封装
awk语言初步
AWK 是一种强大的文本处理和数据解析工具,它支持丰富的运算符和流程控制语句。运算符方面,AWK 提供了基本的算术运算符(+, -, *, /, %, ^, **)和赋值运算符(+=, -=, *=, /=, %=, ^=),以及递增递减运算符(++, --, a++, a–)。此外,AWK 还支持关系运算符(==, !=, <, <=, >, >=)和逻辑运算符(&&, ||, !)。
在流程控制方面,AWK 提供了判断语句(if…else if…else)和循环语句(for, while, do…while)。通过这些流程控制语句,用户可以实现复杂的逻辑判断和循环遍历。
运算符
运算符 | 备注 |
---|---|
+, -, *, , %, ^, \ | 加减乘除、取模、乘方、乘方 |
+=, -=, *=, =, %=, ^= | 加减乘除、取模、乘方对应的复制符 |
++a, --a, a++, a– | 前置递增、前置递减、后置递增、后置递减 |
==, !=, <, <=, >, >= | 关系运算符,返回真假 |
&&, ||, ! | 逻辑运算符:与或非 |
awk
也支持三元运算符,例如
$ awk 'BEGIN { a = 10; b = 20; (a > b) ? max = a : max = b; print "Max =", max}'
Max = 20
除了单个值的计算,awk
还提供了适用于其他数据类型的运算符
- 字符串连接:空格
- 数组遍历:【in】
- 匹配:【~】;不匹配【!~】
数组遍历的方法为:
BEGIN {
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
for (i in arr)
printf "arr[%d] = %d\t", i, arr[i]
print "\n"
}
调用结果为:
awk -f test.awk
arr[0] = 1 arr[1] = 2 arr[2] = 3
流程控制
编程语言的流程控制,主要包括判断和循环。
其判断语句就是if...else if...else
的结构:
$ awk 'BEGIN{num=10; if(num%2==0){printf "%d is even\n", num }else{printf "%d is odd"}}'
10 is even
循环在前面的例子也出现过,包括for
循环、while
循环以及do{}while()
,其逻辑与C语言极度相似,故只列一例不做详述。
$ awk 'BEGIN { for (i = 1; i <= 5; ++i) printf "%d\t",i }'
1 2 3 4 5
$ awk 'BEGIN{ i=1; while(i<5){printf "%d\t", i; i++}}'
1 2 3 4
$ awk 'BEGIN{ i=1; do{printf "%d\t", i++}while(i<5)}'
1 2 3 4
在循环中可以通过break和continue来结束或跳过本层循环,这也同样与C语言雷同。此外,awk还有一个关键字exit,类似于return 0,可以跳出当前程序。
函数封装
【function】是awk语言中用于封装函数的关键字,示例如下
# 文件 fcunTest.awk
function fac(n){
if(n>1)
return n*fac(n-1)
else
return 1
}
BEGIN{
printf "5+1=%d", fac(5)
}
这是个递归求阶乘的函数,调用结果为
$ awk -f funcTest.awk
fac(5)= 120