关系运算符(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) }

这段代码不会输出任何东西,原因是 print 语句必须输出一个值,而关系表达式的结果只是真(1)或假(0),必须显式传递给 print 才能输出。


逻辑运算符(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)
}

同理,--xx-- 也有类似的区别。


复合赋值运算符(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") 三元运算符

练习

  1. 使用 &&|| 过滤数据

    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 优秀
    
  2. 计算总价

    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) 🚀

Last modified: Thursday, 30 January 2025, 1:10 AM