我们在判断条件是否匹配时,一直都是使用简单的表达式。如果您想使用多个表达式来检查特定条件怎么办?在本文中,我们将看到如何组合多个表达式,即复合表达式,以在过滤文本和字符串时检查条件。awk的复合表达式可以由用于“与”的组合运算符&&和||组成对于“或”。复合表达式的一般写法如下:(***表达式)&&(第二表达式)这里只有当“***表达式”和“第二表达式”都为真值时,整个表达式公式才为真.(***表达式)||(第二表达式)这里,只要“***表达式”为真或者“第二表达式”为真,则整个表达式为真。注意:记得加括号。表达式可以由比较运算符组成,详见awk系列的第4节。现在让我们通过一个例子更好地理解它:在这个例子中,有一个文本文件tecmint_deals.txt,其中包含一个随机的Tecmint交易列表,包括名称、价格和类型。TecMintDealListNoNamePriceType1Mac_OS_X_Cleanup_Suite$9.99Software2Basics_Notebook$14.99Lifestyle3Tactical_Pen$25.99Lifestyle4Scapple$19.00Unknown5Nano_Tool_Pack$11.99Unknown6Ditto_Bluetooth_Altering_Device$33.00Tech7Nano_Prowler_Mini_Drone$36.99Tech我们只想打印出价格超过$20且其种类为“Tech”的物品,在其行末用(*)打上标记。Wearegoingtoexecutethefollowing命令。#awk'($3~/^\$[2-9][0-9]*\.[0-9][0-9]$/)&&($4=="技术"){printf"%s\t%s\n",$0,"*";}'tecmint_deals.txt6Ditto_Bluetooth_Altering_Device$33.00Tech*7Nano_Prowler_Mini_Drone$36.99Tech*在这个例子中,我们在复合表达式中使用了两个表达式:表达式1:($3~/^\$[2-9][0-9]*\.[0-9][0-9]$/);找到成交价超过$20的行,即只有当$3,即价格满足/^\$[2-9][0-9]*\.[0-9][0-9]$/时间值为真。表达式2:($4=="Tech");查找是否存在类型为“Tech”的交易,即仅当$4等于“Tech”时该值才为真。请记住,仅当&&运算符的两端都处于状态时,即两个表达式均为真值时,此行才会用(*)标记。总结有时候为了真正满足你的需求,你不得不使用复合表达式。当你掌握比较运算符和复合表达式运算符的使用后,复杂的文本或字符串过滤条件就可以轻松解决。希望本指南对您有所帮助。如果您有任何问题或补充,您可以在下面发表评论,您的问题将得到相应的解释。
