Awk入门
完成条件
关系运算符(Relational Operators)
Awk 提供了一系列关系运算符,用于比较数值或字符串。它们的返回值是真(true)或假(false),但不会返回数值。
运算符 | 说明 |
---|---|
< |
小于 |
<= |
小于等于 |
> |
大于 |
>= |
大于等于 |
== |
等于 |
!= |
不等于 |
~ |
匹配(字符串匹配正则表达式) |
!~ |
不匹配(字符串不匹配正则表达式) |
示例:
BEGIN {
x = 10
print (x > 5) # 1(true)
print (x == 10) # 1(true)
print (x != 10) # 0(false)
}
注意:
BEGIN { a = 1; print (a == 1) }
这段代码不会输出任何东西,原因是
逻辑运算符(Logical Operators)
Awk 提供了三种逻辑运算符(布尔运算符),可用于组合多个关系表达式:
运算符 | 说明 |
---|---|
&& |
逻辑 AND(两个条件都为真时返回真) |
` | |
! |
逻辑 NOT(取反,即真变假,假变真) |
示例:
BEGIN {
x = 10
y = 20
print (x > 5 && y < 30) # 1(true)
print (x < 5 || y < 15) # 0(false)
print (!(x == 10)) # 0(false)
}
算术运算符(Arithmetic Operators)
Awk 提供了常见的算术运算符:
运算符 | 说明 |
---|---|
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
^ |
幂运算(等价于 ** ,某些 Awk 版本支持 ** ) |
% |
取模(求余数) |
示例:
BEGIN {
a = 5
b = 2
print a + b # 7
print a - b # 3
print a * b # 10
print a / b # 2.5
print a % b # 1
print a ^ b # 25(5²)
}
所有计算都是 浮点运算,即使是整数除法也是带小数的。
自增与自减(Increments)
运算符 | 说明 |
---|---|
++ |
自增(x++ 或 ++x ) |
-- |
自减(x-- 或 --x ) |
++
和 --
的位置不同,执行顺序也不同:
++x
:先增加x
,再使用x
。x++
:先使用x
,再增加x
。
示例:
BEGIN {
x = 3
print ++x # 4(先加 1,再打印)
x = 3
print x++ # 3(先打印,再加 1)
print x # 4(此时 `x` 已加 1)
}
同理,--x
和 x--
也有类似的区别。
复合赋值运算符(Compound Assignments)
Awk 提供简化赋值运算符,用于修改变量:
运算符 | 等价于 |
---|---|
x += 2 |
x = x + 2 |
x -= 2 |
x = x - 2 |
x *= 2 |
x = x * 2 |
x /= 2 |
x = x / 2 |
x ^= 2 |
x = x ^ 2 |
x %= 2 |
x = x % 2 |
示例:
BEGIN {
x = 10
x += 5
print x # 15
}
字符串拼接(Concatenation)
Awk 中没有专门的字符串拼接运算符,只需将字符串放在一起即可:
BEGIN {
string = "Super" "power"
print string # 输出 "Superpower"
}
变量字符串拼接:
BEGIN {
a = "Super"
b = "power"
print a b # 输出 "Superpower"
}
注意:拼接字符串时,可以使用括号
()
让语法更清晰。
条件运算符(Conditional Operator)
类似于 C 语言的 三元运算符(Ternary Operator):
print ( price > 500 ? "too expensive" : "cheap" )
工作原理:
- 如果
price > 500
为真,则返回"too expensive"
。 - 否则返回
"cheap"
。
示例:
BEGIN {
price = 600
print (price > 500 ? "too expensive" : "cheap") # too expensive
price = 300
print (price > 500 ? "too expensive" : "cheap") # cheap
}
总结
运算符类型 | 示例 | 说明 |
---|---|---|
关系运算符 | x > 5 |
大于 |
逻辑运算符 | x > 5 && y < 10 |
逻辑 AND |
算术运算符 | a * b + c |
计算表达式 |
自增/自减 | ++x |
先增加再使用 |
复合赋值 | x += 2 |
等价于 x = x + 2 |
字符串拼接 | "Hello" "World" |
结果 "HelloWorld" |
条件运算符 | (x > 10 ? "Yes" : "No") |
三元运算符 |
练习
-
使用
&&
和||
过滤数据awk '{ if ($2 >= 80 && $3 == "Math") print $1, "优秀"; else print $1, "普通" }' scores.txt
示例输入
scores.txt
:Alice 90 Math Bob 75 English Charlie 85 Math
输出:
Alice 优秀 Bob 普通 Charlie 优秀
-
计算总价
awk '{ total += $2 * $3 } END { print "Total Price:", total }' items.txt
示例输入
items.txt
:Apple 3 2 Banana 2 1.5
输出:
Total Price: 9
在下一章,我们将学习 Awk 的用户自定义函数(User-Defined Functions) 🚀
最后修改: 2025年01月30日 星期四 01:10