一直以来,我们一直在检查简单的表达式,检查条件是否满足。 如果要使用多于一个表达式来检查特定条件,该怎么办?
在本文中,我们将了解如何组合多个表达式(称为复合表达式),以在过滤文本或字符串时检查条件。
在AWK中, 化合物表达式是使用内置&&
称为(and)
和||
称为(or)
化合物的运营商。
复合表达式的一般语法是:
( first_expression ) && ( second_expression )
在这里, first_expression
和second_expression
必须真实,使整个表达式真。
( first_expression ) || ( second_expression)
在这里,无论是表达一个first_expression
或second_expression
整个表达式为true必须是真实的。
注意 :请记住,始终包括括号。
表达式可以使用比较操作符,我们在看着建awk的系列第4部分 。
让我们现在使用下面的示例来清楚地了解:
在这个例子中,有一个名为的文本文件youcl_deals.txt
,其中包含的一些惊人的随机youcl交易的列表,它包括交易,价格和类型的名称。
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型“技术”的使用仅打印和国旗交易(**)
标志在每行的末尾。
我们需要运行下面的命令。
# awk '($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' youcl_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个==“科技”); 检查是否该交易型“技术”的,如果的$ 4的值等于“科技”这是唯一的真。
请记住,行只会被标记的(**)
如果因为各国的第一的原则表达和第二表达是真实的&&
运营商。
概要
一些条件总是需要构建复合表达式,以便您完全匹配您想要的。 当你理解比较和复合表达式运算符的使用,然后,过滤文本或字符串基于一些困难的条件将变得容易。
希望您认为本指南很有用,对于任何问题或补充,始终记住留下评论,您的关注将相应解决。