如何编写一个更符合输出的脚本&输入可以来自/到管道?

时间:2015-06-03 14:15:15

标签: bash shell pipe stdout stdin

简单的问题,但我还没有找到明确的&简单的回答:

  1. 如何编写可将输出传输到另一个程序的脚本?
  2. 例如:my_script.sh | awk '{ whatever }' | ...

    1. 如何编写从管道接收输入的脚本?
    2. 例如:awk '{ whatever }' some_file | my_script.sh

      stdoutstdin用于"管道输出到另一个程序"和#34;从另一个程序输入"?

      我打算管道输入&输出大文本文件(10Mb到几Gb)。 echocat是否在my_script.sh内使用正确的实用程序来管理?

      同样,while read line; do ..... done是否正确用于接收来自管道的输入?我想在awk

      的输入中大部分时间使用sedmy_script.sh

1 个答案:

答案 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并对它们进行处理。