awk 系列Part5:如何使用 awk 复合表达式
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 复合表达式相关推荐
- awk 系列:awk 怎么读取标准输入(STDIN)
在 awk 系列的前几节,我们看到大多数操作都是从一个文件或多个文件读取输入,或者你想要把标准输入作为 awk 的输入. 在 awk 系列的第七节中,我们将会看到几个例子,你可以筛选其他命令的输出代替 ...
- awk 系列Part7:awk 怎么从标准输入(STDIN)读取输入
awk 系列:awk 怎么从标准输入(STDIN)读取输入 在 awk 系列的前几节,我们看到大多数操作都是从一个文件或多个文件读取输入,或者你想要把标准输入作为 awk 的输入. 在 awk 系列的 ...
- gawk linux,精通awk系列(1):安装新版本的gawk
本文将要为您介绍的是精通awk系列(1):安装新版本的gawk,教程操作方法: 回到: Linux系列文章 Shell系列文章 Awk系列文章 安装新版本gawk awk有很多种版本,例如nawk.g ...
- linux条件语句awk,精通awk系列(18):awk流程控制之if、while、switch、for语句
回到: Linux系列文章 Shell系列文章 Awk系列文章 流程控制语句 注:awk中语句块没有作用域,都是全局变量. if (condition) statement [ else statem ...
- Linux从入门到精通系列之SHELL编程awk语法结构及案例解析
前言 AWK 是一种非常强大的文本分析工具.适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便. 一.awk介绍 1. ...
- Sedawk笔记之awk篇:快速了解Awk(三)
上一篇中,主要介绍了awk中的一些基础概念,包括记录与字段.表达式.变量.语句等等,本篇在此基础上进一步介绍下awk中的函数. awk的函数分成数学函数.字符串函数.I/O处理函数以及用户自定义的函数 ...
- awk bc命令 linux_linux之awk命令(转载)
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F ...
- awk bc命令 linux_Linux 的 awk 命令教程手册,建议收藏!
Linux 的 awk 命令相信不少人都用过,但是真正研究它的人应该不多.因为,我们多数人都是面向百度编程的.今天我们抽个时间,简单的来说一下它.我随便谷歌了一下,就找到了两位大神的文章,相信不少人都 ...
- linux中awk命令是什么,Linux awk命令详解
awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具. 和 sed 命令类似,awk 命令也是逐行扫描文件(从第一行到最后一行),寻找含有目标文本的行,如果匹配成功,则 ...
最新文章
- 搭建EJB3开发环境
- asp.net mvc连接mysql_asp.net mvc4连接mysql
- 【汇编语言】上机实验 win7/8/10 64位系统 进入32位DOS模式 实现dubug/edit/masm/link功能
- php htts cookies,Http和Https下的cookie的写入问题
- Python字符串的encode与decode 解决乱码问题
- 网站数据是怎么存取在mysql_数据是怎么存储在mysql?
- 按照c语言规首字母只能是,C语言--指针 - osc_nbqoh20k的个人空间 - OSCHINA - 中文开源技术交流社区...
- html5华迪,比亚迪永通华迪4S店:元新能源最低售8.19万
- 多线程访问导致崩溃一例
- 好程序员大数据视频教程之快速入门Scala篇
- 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?...
- Error occurred when evaluating apply
- vscode中用emmet语法a{}*3无法自动换行
- 催眠曲用计算机怎么弹,在电脑中巧播“催眠曲”
- UVA 487 - Boggle Blitz
- 活动如何造势推广?会议软件帮您忙
- 英文邮件开场白 opening/greeting,除了I hope this email finds you well,你还可以用什么?
- android 窗口类型分析
- android自学流程!Android开发者出路在哪?不吃透都对不起自己
- c4d支持mac系统渲染器有哪些_Corona4最新版下载 C4D实时交互渲染器Corona Renderer 4 for Cinema 4D R14-R21 Mac苹果电脑版 下载-脚本之家...
热门文章
- hdu2133: What day is it
- [转载]DB2数据库移植罕有结果片面解析(2)
- eWeek: 三巨头Web应用服务对比
- oracle提高io,【转】Oracle性能优化调整--调整磁盘I/O
- SpringMVC(三)——JSON
- 我的Python脚本——生成任意波形并存为txt
- Spring Boot AJAX 示例
- ADS2017打开出现cannot create the directory,解决办法。
- C语言 | 结构体详解(C结构体)
- python stringvar函数_Tkinter 求助,怎么获取StringVar() 的值