正则表达式
AWK在处理正则表达式方面是非常强大的,使用简单的正则表达式可以处理非常复杂的问题 。

文章插图

文章插图
数组
AWK支持关联数组,也就是说,不仅可以使用数字索引的数组,还可以使用字符串作为索引,而且数字索引也不要求是连续的 。数组不需要声明可以直接使用,语法如下:
在AWK中,只支持一维数组,但是可以通过一维数组模拟多维,例如我们有一个3×3的三维数组
流程控制
流程控制语句与大多数语言一样,基本格式如下

文章插图
循环
循环操作与其他C系语言一样,主要包括 for , while , do...while , break , continue 语句,当然,还有一个 exit 语句用于退出脚本执行 。

文章插图
exit 用于退出脚本,参数为退出的状态码,可以通过shell中的 $? 获取函数
内建函数
AWK提供了很多方便的内建函数供编程人员使用 。由于函数比较多,个人觉得单纯看每个函数的使用也没有什么实际意义,比较容易遗忘,因此,这里只简单的列出常用的一些函数,只需要对其有个印象即可,使用的时候再去 查手册 效果会更好一些吧 。
数学函数
- atan2(y, x)
- cos(expr)
- exp(expr)
- int(expr)
- log(expr)
- rand
- sin(expr)
- sqrt(expr)
- srand([expr])
- asort(arr [, d [, how] ])
- asorti(arr [, d [, how] ])
- gsub(regex, sub, string)
- index(str, sub)
- length(str)
- match(str, regex)
- split(str, arr, regex)
- sprintf(format, expr-list)
- strtonum(str)
- sub(regex, sub, string)
- substr(str, start, l)
- tolower(str)
- toupper(str)
- systime
- mktime(datespec)
- strftime([format [, timestamp[, utc-flag]]])
- and
- compl
- lshift
- rshift
- or
- xor

文章插图

文章插图

文章插图

文章插图

文章插图
用户自定义函数
函数是程序基本的组成部分,AWK允许我们自己创建自定义的函数 。一个大型的程序可以被划分为多个函数,每个函数之间可以独立的开发和测试,提供可重用的代码 。
下面是用户自定义函数的基本语法

文章插图
输出重定向重定向操作符
到目前为止,我们所有的程序都是直接显示数据到了标准输出流,其实,我们也可以将输出重定向到文件 。重定向操作符跟在 print 和 printf 函数的后面,与shell中的用法基本一致 。

文章插图
管道
除了将输出重定向到文件之外,我们还可以将输出重定向到其它程序,与shell中一样,我们可以使用管道操作符 |。

文章插图
第一次I/O操作使用了 |& 操作符,gawk会创建一个到运行其它程序的子进程的双向管道, print 的输出被写入到了 subprogram 的标准输入,而这个 subprogram 的标准输出在gawk中使用 getline 函数进行读取 。
注意:目前协同进程的标准错误输出将会和gawk的标准错误输出混杂在一起,无法单独获取标准错误输出 。另外,I/O缓冲可能存在问题,gawk程序会自动的刷新所有输出到下游的协同进程的管道 。但是,如果协同进程没有刷新其标准输出的话,gawk将可能会在使用 getline 函数从协同进程读取输出的时候挂起,这就可能引起死锁 。我们可以使用 close 函数关闭双向管道的 to或者 from一端,这两个字符串值告诉gawk发送数据到协同进程完成时或者从协同进程读取完毕时关闭管道 。在使用系统命令 sort 的时候是这样做是非常必要的,因为它必须等所有输出都读取完毕时才能进行排序 。
推荐阅读
- 几分钟就能搞定的葱油饼,早餐的首选
- 鸡蛋煮几分钟口感最好?
- 每天小小十分钟,却能养肺一辈子
- 学会黑客xss攻击,就能让你走上人生的巅峰
- 霞浦楹联学会茶联多
- 一篇文章,教你学会Git
- 3月养君子兰,学会这几点,叶子又肥又绿,开花一簇簇,漂亮极了
- 给老板敬酒只会说“我敬您”?学会这3招,老板高看你一眼
- 卫衣选“长”还是“短”?学会按身高比例挑,这样穿搭才又瘦又高
- 全自动洗衣机洗的过程中出现E4 洗衣机简自洁洗到最后十分钟出现e4
