如何在Linux中使用复合表达式与Awk  - 第5部分

一直以来,我们一直在检查简单的表达式,检查条件是否满足。 如果要使用多于一个表达式来检查特定条件,该怎么办?

在本文中,我们将了解如何组合多个表达式(称为复合表达式),以在过滤文本或字符串时检查条件。

AWK中, 化合物表达式是使用内置&&称为(and)||称为(or)化合物的运营商。

复合表达式的一般语法是:

( first_expression ) && ( second_expression )

在这里, first_expressionsecond_expression必须真实,使整个表达式真。

( first_expression ) || ( second_expression) 

在这里,无论是表达一个first_expressionsecond_expression整个表达式为true必须是真实的。

注意 :请记住,始终包括括号。

表达式可以使用比较操作符,我们在看着建awk的系列第4部分

让我们现在使用下面的示例来清楚地了解:

在这个例子中,有一个名为的文本文件youcl_deals.txt ,其中包含的一些惊人的随机youcl交易的列表,它包括交易,价格和类型的名称。

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	 *

在这个例子中,我们在复合表达式中使用了两个表达式:

  1. 第一个表达式($ 3〜/^\$[2-9][0-9]*\.[0-9][0-9]$/); 检查与同价位高于$ 20宗交易行,如果这是价格的$3的模式匹配/^\$[2-9][0-9]*\.[0-9这是唯一真正] [0-9] $ /
  2. 而第二个表达式($ 4个==“科技”); 检查是否该交易型“技术”的,如果的$ 4的值等于“科技”这是唯一的真。

请记住,行只会被标记的(**)如果因为各国的第一的原则表达第二表达是真实的&&运营商。

概要

一些条件总是需要构建复合表达式,以便您完全匹配您想要的。 当你理解比较和复合表达式运算符的使用,然后,过滤文本或字符串基于一些困难的条件将变得容易。

希望您认为本指南很有用,对于任何问题或补充,始终记住留下评论,您的关注将相应解决。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏