首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk管道输入和输出外壳cmd

awk管道输入和输出外壳cmd
EN

Unix & Linux用户
提问于 2018-06-03 20:57:23
回答 1查看 2.1K关注 0票数 3

我想在awk中运行shell命令。Shell命令通常采用stdin并写入stdout。

代码语言:javascript
复制
print to_sort | "sort"
"sort" | getline

不工作(第二行排序等待输入)

代码语言:javascript
复制
print to_sort | "sort" | getline

是语法错误。

EN

回答 1

Unix & Linux用户

发布于 2018-06-03 21:19:26

能做到这一点的GNU awk知道协进程。它的手册还描述了您所做的工作不起作用的原因:管道中使用的两个命令是不同的子进程,即使它们是用相同的命令行启动的。要从同一个子进程获取输入和输出,请在两个管道上使用|&

代码语言:javascript
复制
awk 'BEGIN {com = "cat -n"} {print |& com; com |& getline; print}'

不过,这并不能真正帮助您使用sort,因为sort在它的输入上看到EOF之前不会产生任何输出。

使用这样的命令,您需要首先给出所有的输出,关闭协处理管道的写端,然后才开始读取。例如。

代码语言:javascript
复制
awk 'BEGIN {com="sort"} {print |& com} END { print "---"; close(com, "to"); while(com |& getline) print }'
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/447670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档