awk 系列:如何使用 awk 复合表达式

一直以来在查对条件是否匹配时,我们使用的都是简单的表达式。那如果你想用超过一个表达式来查对特定的条件呢?

本文,我们将看看如何在过滤文本和字符串时,结合多个表达式,即复合表达式,用以查对条件。

awk 的复合表达式可由表示“与”的组合操作符 && 和表示“或”的 || 构成。

复合表达式的常规写法如下:

( 第一个表达式 ) && ( 第二个表达式 )

这里只有当“第一个表达式” 和“第二个表达式”都是真值时整个表达式才为真。

( 第一个表达式 ) || ( 第二个表达式) 

这里只要“第一个表达式” 为真或“第二个表达式”为真,整个表达式就为真。

注意:切记要加括号。

表达式可以由比较操作符构成,具体可查看 awk 系列的第四节。

现在让我们通过一个例子来加深理解:

此例中,有一个文本文件 tecmint_deals.txt,文本中包含着一张随机的 Tecmint 交易清单,其中包含了名称、价格和种类。

TecMint Deal List
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     *

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

  • 表达式 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” 时值才为真值。
    切记,只有当 && 操作符的两端状态,也就是两个表达式都是真值的情况下,这一行才会被打上 (*) 标志。

总结

有些时候为了真正符合你的需求,就不得不用到复合表达式。当你掌握了比较和复合表达式操作符的用法之后,复杂的文本或字符串过滤条件也能轻松解决。

希望本向导对你有所帮助,如果你有任何问题或者补充,可以在下方发表评论,你的问题将会得到相应的解释。


via: http://www.tecmint.com/combine-multiple-expressions-in-awk/

作者:Aaron Kili
译者:martin2011qi
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

转载于:https://blog.51cto.com/wutengfei/2401621

awk 系列Part5:如何使用 awk 复合表达式相关推荐

  1. awk 系列:awk 怎么读取标准输入(STDIN)

    在 awk 系列的前几节,我们看到大多数操作都是从一个文件或多个文件读取输入,或者你想要把标准输入作为 awk 的输入. 在 awk 系列的第七节中,我们将会看到几个例子,你可以筛选其他命令的输出代替 ...

  2. awk 系列Part7:awk 怎么从标准输入(STDIN)读取输入

    awk 系列:awk 怎么从标准输入(STDIN)读取输入 在 awk 系列的前几节,我们看到大多数操作都是从一个文件或多个文件读取输入,或者你想要把标准输入作为 awk 的输入. 在 awk 系列的 ...

  3. gawk linux,精通awk系列(1):安装新版本的gawk

    本文将要为您介绍的是精通awk系列(1):安装新版本的gawk,教程操作方法: 回到: Linux系列文章 Shell系列文章 Awk系列文章 安装新版本gawk awk有很多种版本,例如nawk.g ...

  4. linux条件语句awk,精通awk系列(18):awk流程控制之if、while、switch、for语句

    回到: Linux系列文章 Shell系列文章 Awk系列文章 流程控制语句 注:awk中语句块没有作用域,都是全局变量. if (condition) statement [ else statem ...

  5. Linux从入门到精通系列之SHELL编程awk语法结构及案例解析

    前言 AWK 是一种非常强大的文本分析工具.适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便. 一.awk介绍 1. ...

  6. Sedawk笔记之awk篇:快速了解Awk(三)

    上一篇中,主要介绍了awk中的一些基础概念,包括记录与字段.表达式.变量.语句等等,本篇在此基础上进一步介绍下awk中的函数. awk的函数分成数学函数.字符串函数.I/O处理函数以及用户自定义的函数 ...

  7. awk bc命令 linux_linux之awk命令(转载)

    awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F ...

  8. awk bc命令 linux_Linux 的 awk 命令教程手册,建议收藏!

    Linux 的 awk 命令相信不少人都用过,但是真正研究它的人应该不多.因为,我们多数人都是面向百度编程的.今天我们抽个时间,简单的来说一下它.我随便谷歌了一下,就找到了两位大神的文章,相信不少人都 ...

  9. linux中awk命令是什么,Linux awk命令详解

    awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具. 和 sed 命令类似,awk 命令也是逐行扫描文件(从第一行到最后一行),寻找含有目标文本的行,如果匹配成功,则 ...

最新文章

  1. 搭建EJB3开发环境
  2. asp.net mvc连接mysql_asp.net mvc4连接mysql
  3. 【汇编语言】上机实验 win7/8/10 64位系统 进入32位DOS模式 实现dubug/edit/masm/link功能
  4. php htts cookies,Http和Https下的cookie的写入问题
  5. Python字符串的encode与decode 解决乱码问题
  6. 网站数据是怎么存取在mysql_数据是怎么存储在mysql?
  7. 按照c语言规首字母只能是,C语言--指针 - osc_nbqoh20k的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. html5华迪,比亚迪永通华迪4S店:元新能源最低售8.19万
  9. 多线程访问导致崩溃一例
  10. 好程序员大数据视频教程之快速入门Scala篇
  11. 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?...
  12. Error occurred when evaluating apply
  13. vscode中用emmet语法a{}*3无法自动换行
  14. 催眠曲用计算机怎么弹,在电脑中巧播“催眠曲”
  15. UVA 487 - Boggle Blitz
  16. 活动如何造势推广?会议软件帮您忙
  17. 英文邮件开场白 opening/greeting,除了I hope this email finds you well,你还可以用什么?
  18. android 窗口类型分析
  19. android自学流程!Android开发者出路在哪?不吃透都对不起自己
  20. c4d支持mac系统渲染器有哪些_Corona4最新版下载 C4D实时交互渲染器Corona Renderer 4 for Cinema 4D R14-R21 Mac苹果电脑版 下载-脚本之家...

热门文章

  1. hdu2133: What day is it
  2. [转载]DB2数据库移植罕有结果片面解析(2)
  3. eWeek: 三巨头Web应用服务对比
  4. oracle提高io,【转】Oracle性能优化调整--调整磁盘I/O
  5. SpringMVC(三)——JSON
  6. 我的Python脚本——生成任意波形并存为txt
  7. Spring Boot AJAX 示例
  8. ADS2017打开出现cannot create the directory,解决办法。
  9. C语言 | 结构体详解(C结构体)
  10. python stringvar函数_Tkinter 求助,怎么获取StringVar() 的值