文章插图
管道
除了将输出重定向到文件之外 , 我们还可以将输出重定向到其它程序 , 与shell中一样 , 我们可以使用管道操作符 |。
文章插图
第一次I/O操作使用了 |& 操作符 , gawk会创建一个到运行其它程序的子进程的双向管道 , print 的输出被写入到了 subprogram 的标准输入 , 而这个 subprogram 的标准输出在gawk中使用 getline 函数进行读取 。
注意:目前协同进程的标准错误输出将会和gawk的标准错误输出混杂在一起 , 无法单独获取标准错误输出 。另外 , I/O缓冲可能存在问题 , gawk程序会自动的刷新所有输出到下游的协同进程的管道 。但是 , 如果协同进程没有刷新其标准输出的话 , gawk将可能会在使用 getline 函数从协同进程读取输出的时候挂起 , 这就可能引起死锁 。我们可以使用 close 函数关闭双向管道的 to或者 from一端 , 这两个字符串值告诉gawk发送数据到协同进程完成时或者从协同进程读取完毕时关闭管道 。在使用系统命令 sort 的时候是这样做是非常必要的 , 因为它必须等所有输出都读取完毕时才能进行排序 。
文章插图
上例看起来有些复杂 , 我们逐行分析一下
- 首先 , 第一行 cmd = “tr [a-z] [A-Z]” 是在AWK中要建立双向连接的命令
- 第二行的 print 命令用于为 tr 命令提供输入 , 而 |& 用于指出要建立双向连接
- 第三行用于在上面的语句 close(cmd, “to”), 在执行完成后关闭其 to 进程
- 第四行 cmd |& getline out 使用getline函数存储输出到变量out中
- 最后一行使用 close 函数关闭命令
到目前为止 , 我们已经使用过 print 和 printf 函数显示数据到标准输出 , 但是 printf 函数实际上要比我们之前使用的情况更加强大得多 。该函数是从C语言中借鉴来的 , 在处理格式化的输出时非常有用 。
文章插图
格式化输出标识有 %c , %d , %s 等 , 基本与C语言一致 , 这里就不多赘述了 。执行shell命令
在AWK中执行shell命令有两种方式
- 使用 system 函数
- 使用管道
system函数用于执行操作系统命令并且返回命令的退出码到awk 。
文章插图
使用管道
如果要执行的命令很多 , 可以将输出的命令直接用管道传递给 “/bin/sh”执行
文章插图
参考
- AWK Tutorial
- The GNU Awk User’s Guide
来源:伯乐在线- mylxsw
推荐阅读
- 送外卖真的赚钱吗 送外卖赚钱还是送快递赚钱
- 梦见着火了又被扑灭了 梦见着火但很快被扑灭了解梦
- 气温回复过快春茶不及采 泸州茶叶或减产三成
- 飞人乔丹的独特手表收藏
- 一分钟看完,2021年职场7大新趋势
- 黑茶具有收藏价值 虫屎茶属于高价产品
- 瑞安市,茶芽长势快 茶商收购忙
- 一马赫速度有多快?换算成每千米一小时是多少?
- 情侣间送礼物需谨慎,这6种背后都大有讲究,收藏以后慢慢用
- 如何甄别普洱茶的等级 好坏