【译】 AWK教程指南 4通过文本内容和对比选择指定的记录
Pattern { Action }为awk中最主要的语法。若某Pattern的值为真则执行它后面的 Action。 awk中常使用"关系表达式" (Relational Expression)来当成 Pattern。
awk 中除了>, <, ==, != ,...等关系运算符( Relational Operators )外,另外提供 ~(match),!~(Not Match) 二个关系运算符。利用这两个运算符,可判断某字符串是否包含能匹配所指定正则表达式的子字符串。由于这些特性,很容易使用awk来编写需要字符串比对、判断的程序。
范例:接上例,
1. 组装部门员工调薪5%,(组装部门员工的ID以"A"开头)
2. 所有员工最后的薪资率若仍低于100,则以100计。
3. 编写 awk 程序打印新的员工薪资率报表。
分析:这个程序须先判断所读入的数据行是否满足指定条件,再进行某些动作。awk中 Pattern { Actions } 的语法已涵盖这种 " if ( 条件) { 动作} "的架构。
编写如下的程序, 并取名 adjust1.awk
$ ~ /^A.*/ { $ *= 1.05 }
$ < { $ = }
{ printf("%s %8s %d\n", $, $, $)}
执行下列命令:
$ awk -f adjust1.awk emp.dat
结果如下:屏幕出现:

说 明:
1. awk的工作流程是:从数据文件中每次读入一行数据,依序执行完程序中所有的 Pattern{ Action }指令
| Pattern | Actions |
| $1~/^A.*/ | { $3 *= 1.05 } |
| $3 < 100 | { $3 = 100 } |
| {printf("%s %8s %d\n",$1,$2,$3)} |
再从数据文件中读进下一条记录继续进行处理。
2. 第一个 Pattern { Action }是:
$ ~ /^A.*/ { $ *= 1.05 }
$1 ~ /^A.*/ 是一个Pattern,用来判断该行数据的第一个字段是否包含以"A"开头的子字符串。其中 /^A.*/ 是一个Regular Expression,用以表示任何以"A"开头的字符串。(有关 Regular Expression 的用法 参考 附录 E )。
Actions 部分为 $3 *= 1.05。$3 *= 1.05 与 $3 = $3 * 1.05 意义相同,运算符"*=" 的用法则与 C 语言中一样。此后与 C 语言中用法相同的运算符或语法将不予赘述。
3. 第二个 Pattern { Actions } 是:
$ < { $ = }
若第三个字段内容(即时薪)小于100,则调整为100。
4. 第三个 Pattern { Actions } 是:
{printf("%s %8s %d\n",$, $, $)}
省略了Pattern(无条件执行Actions),故所有数据行调整后的数据都将被打印。
【译】 AWK教程指南 4通过文本内容和对比选择指定的记录的更多相关文章
- 【译】 AWK教程指南
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南 1前言
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南 附录D-AWK的内置变量
因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序&q ...
- Knockout v3.4.0 中文版教程-10-绑定-控制文本内容和外观-visible绑定
4.绑定 1. 控制文本内容和外观 1. visible绑定 目的 visible绑定可以根据你传入绑定的值控制关联的DOM元素显示或隐藏. 例子 <div data-bind="vi ...
- css3的user-select属性设置文本内容能否被选择
CSS3中提供了个user-select属性来设置或检索是否允许用户选中文本. 语法 user-select:none | text | all | element. 默认值:text. 适用性:除替 ...
- 【译】 AWK教程指南 7AWK应用实例
本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...
- 【译】 AWK教程指南 附录A-Patterns
awk 通过判断 Pattern 的值来决定是否执行其后所对应的Actions.这里列出几种常见的Pattern: A.1 BEGIN BEGIN 为 awk 的保留字,是一种特殊的 Pattern. ...
- 【译】 AWK教程指南 11递归程序
awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束——该变量不论在function外或 func ...
- 【译】 AWK教程指南 10编写可与用户交互的AWK程序
执行awk程序时,awk会自动从文件中读取数据来进行处理,直到文件结束.只要将awk读取数据的来源改成键盘输入,便可设计与awk 交互的程序.本节将提供一个该类程序的范例. 范例:本节将编写一个英语生 ...
随机推荐
- python字符串内容替换的方法(转载)
python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法. ...
- Maven 解决JAR包冲突
在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择 “Dependency Hierarchy” 2 ...
- string.Equals 比较2个字符串是否相同忽略大小写
bool res = string.Equals(str1, str2, StringComparison.CurrentCultureIgnoreCase)
- 如何让WIN32应用程序支持MFC类库
参考链接:http://wenku.baidu.com/view/68fc340c79563c1ec5da714b.html
- hdu 4336 Card Collector 容斥原理
读完题目就知道要使用容斥原理做! 下面用的是二进制实现的容斥原理,详见:http://www.cnblogs.com/xin-hua/p/3213050.html 代码如下: #include< ...
- UIcollectionView的使用(首页的搭建2)
2.2 直接购买的UIcollectionCell 2.2.1创建CFPromptBuyCell,继承自UICollectionViewCell,定义了标题和图片两个属性 2.2.2 在.m文件中定义 ...
- 算法总结之欧拉函数&中国剩余定理
算法总结之欧拉函数&中国剩余定理 1.欧拉函数 概念:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)( ...
- Android sd卡读取数据库
先在 Manifest 里添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE&q ...
- HBase Shell输入命令无法删除问题解决技巧
一.引言: HBase shell使用过程中,使用CRT客户端,命令输入后无法删除一直困绕着我,今天终于受不了,几番度娘,谷哥之后,终于有了解决方法,特共享给大家. 二.操作步骤 secureCRT中 ...
- umount nfs状态为busy的处理方法
umountall状态为busy的系统: 以下四种情况,文件系统都会显示:umount: file_system_name busy 1 A program is accessing a file o ...