如何在 Linux 中通过 Awk 使用复合表达式 - 第 5 部分
一直以来,我们在检查条件是否满足时一直在查看简单的表达式。如果您想使用多个表达式来检查特定条件怎么办?
在本文中,我们将了解如何组合多个表达式(称为复合表达式)来在过滤文本或字符串时检查条件。
在 Awk 中,复合表达式是使用称为 (and)
的 &&
和 | 构建的。 |
称为(或)
复合运算符。
复合表达式的一般语法是:
( first_expression ) && ( second_expression )
这里,first_expression
和 second_expression
必须为 true 才能使整个表达式为 true。
( first_expression ) || ( second_expression)
此处,first_expression
或 second_expression
中的一个表达式必须为 true,整个表达式才为 true。
警告:请记住始终包含括号。
可以使用我们在 awk 系列第 4 部分中介绍的比较运算符来构建表达式。
现在让我们通过下面的例子来清楚地理解:
在此示例中,有一个名为 howtoing_deals.txt
的文本文件,其中包含一些令人惊叹的随机 Howtoing 交易的列表,其中包括交易名称、价格和类型。
No Name Price Type
1 Mac_OS_X_Cleanup_Suite $9.99 Software
2 Basics_Notebook $14.99 Lifestyle
3 Tactical_Pen $25.99 Lifestyle
4 Scapple $19.00 Unknown
5 Nano_Tool_Pack $11.99 Unknown
6 Ditto_Bluetooth_Altering_Device $33.00 Tech
7 Nano_Prowler_Mini_Drone $36.99 Tech
假设我们只想打印并标记高于 $20 且类型为 “Tech ” 的交易,并在末尾使用 (**)
符号每行的。
我们需要运行下面的命令。
# awk '($3 ~ /^$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' tecmint_deals.txt
6 Ditto_Bluetooth_Altering_Device $33.00 Tech *
7 Nano_Prowler_Mini_Drone $36.99 Tech *
在此示例中,我们在复合表达式中使用了两个表达式:
- 第一个表达式 ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ;检查价格高于 $20 的交易行,并且仅当价格 $3 的值与模式 /^\$[ 匹配时才为真2-9][0-9]*\.[0-9][0-9]$/
- 第二个表达式 ($4 == “Tech”) ;检查交易是否属于“科技”类型,并且仅当$4的值等于“科技”时才为真。
请记住,只有当第一个表达式和第二个表达式为 true 时,才会用 (**)
标记一行,正如说明的原则一样。 &&
运算符。
概括
有些条件总是需要构建复合表达式才能完全匹配您想要的内容。当您了解比较和复合表达式运算符的使用时,根据一些困难的条件过滤文本或字符串将变得很容易。
希望您发现本指南有用,对于任何问题或补充,请始终记住发表评论,您的疑虑将得到相应解决。