简单的问题,但我还没有找到明确的&简单的回答:
例如:my_script.sh | awk '{ whatever }' | ...
例如:awk '{ whatever }' some_file | my_script.sh
stdout
和stdin
用于"管道输出到另一个程序"和#34;从另一个程序输入"?
我打算管道输入&输出大文本文件(10Mb到几Gb)。 echo
或cat
是否在my_script.sh
内使用正确的实用程序来管理?
同样,while read line; do ..... done
是否正确用于接收来自管道的输入?我想在awk
sed
或my_script.sh
答案 0 :(得分:1)
您的示例都涉及此管道,您希望脚本代表其中一个:
awk '{ whatever }' some_file | awk '{ whatever }'
为此,您只需将每个命令放在一个文件中:
producer
:
#!/bin/bash
awk '{ whatever }' some_file
consumer
:
#!/bin/bash
awk '{ whatever }'
现在你可以运行#1:
producer | awk '{ whatever }' | ...
你可以跑#2:
awk '{ whatever }' some_file | consumer
当然两者同时出现:
producer | consumer
你不应该陷入这样的陷阱,认为你需要使用while循环或类似的方式在awk
上读取数据。 awk
自己读取输入和写入输出,所以每当你运行它而没有任何进一步的规范时,它将继承脚本的stdin和stdout并对它们进行处理。