我想在awk中运行shell命令。Shell命令通常采用stdin并写入stdout。
print to_sort | "sort"
"sort" | getline不工作(第二行排序等待输入)
print to_sort | "sort" | getline是语法错误。
发布于 2018-06-03 21:19:26
能做到这一点的GNU awk知道协进程。它的手册还描述了您所做的工作不起作用的原因:管道中使用的两个命令是不同的子进程,即使它们是用相同的命令行启动的。要从同一个子进程获取输入和输出,请在两个管道上使用|&:
awk 'BEGIN {com = "cat -n"} {print |& com; com |& getline; print}'不过,这并不能真正帮助您使用sort,因为sort在它的输入上看到EOF之前不会产生任何输出。
使用这样的命令,您需要首先给出所有的输出,关闭协处理管道的写端,然后才开始读取。例如。
awk 'BEGIN {com="sort"} {print |& com} END { print "---"; close(com, "to"); while(com |& getline) print }'https://unix.stackexchange.com/questions/447670
复制相似问题