带输入块的AWK / PERL调用命令

时间:2018-08-20 20:51:39

标签: perl awk

我有一个名为processor.sh的脚本,用于处理标准输入。它处理一行代码,如下所示:

address: abc
phone: 123
user: def

考虑到我有以下文件:

address: a1
phone: p1
user: u1

address: a2
phone: p2
user: u2

address: a3
phone: p3
user: u3

我想多次调用processor.sh,每个块一次,并向其提供标准输入的文本块。

我知道可以通过使用this之类的文件分割为临时文件来完成。我希望避免创建临时文件,即仅使用管道。

是否有一种简短的方法(可以合理地称为“单线”方法)?

2 个答案:

答案 0 :(得分:4)

perl -MIPC::Run=run -00ne'run [ "processor.sh" ], "<", \$_'

或者如果要删除尾行:

perl -MIPC::Run=run -00nle'run [ "processor.sh" ], "<", \"$_\n"'

答案 1 :(得分:3)

awk

$ awk -v RS= '{cmd="processor.sh"; 
               print | cmd; 
               close(cmd)}' file

一个优点是,只要至少有一条空行将它们分开,记录的长度就可以变化。