2009-11-16 52 views
2

我有一个Perl脚本,写出一个数组填充整数到标准输出,每个在一个单独的行。所以,我会得到这样的输出:如何为我的Perl脚本的每行输出运行curl命令?

412 
917 
1 
etc 

我想要做的是能管这个脚本的输出到xargs的,并使用每个整数做出卷曲电话。类似这样的:

cat input.json | ./jsonValueExtracter.pl -s exampleId | xargs curl http://brsitv01:8080/exampleId/$1 > example$1.json 

下面是我正在使用的简单脚本的摘录。

my @values; 
while(<STDIN>) { 
    chomp; 
    s/\s+//g; # Remove spaces 
    s/"//g; # Remove single quotes 
    push @values, /$opt_s:(\w+),?/g; 
} 

print join(" \n",@values); 

但是,这并不按我期望的方式工作。当我运行以下命令:

cat input.json | perl jsonValueExtracter.pl -s exampleId | xargs echo http://brsitv01:8080/exampleId/$1 

我得到的输出:

http://brsitv01:8080/exampleId/ 412 917 1 

有什么特别的,我需要做的,使用xargs的Perl脚本的输出?

感谢

+0

note:无用的'cat':'perl jsonValueExtracter.pl -s exampleId 2009-11-16 17:12:31

回答

5

xargs不会使用那样的$ 1。 $ 1是空白的,而xargs只是把这些数字放在命令行的末尾。

你可能想使用一个bash像循环:

for i in `./jsonValueExtracter.pl -s exampleId < input.json`; do curl http://brsitv01:8080/exampleId/$i > example$i.json; done 

注意,你不需要猫:

for i in `./jsonValueExtracter.pl -s exampleId < input.json` 
do 
    curl http://brsitv01:8080/exampleId/$i > example$i.json 
done 

它可以在用分号一行中写入:

cat [file] | script.foo 

等同于:

script.foo < [file] 
+0

伟大的建议。谢谢。 – Steve 2009-11-16 12:42:10

5

添加-n 1至xargs的,使其只能吃一个在每次运行参数。

+0

太棒了,像魅力一样工作。谢谢 – Steve 2009-11-16 12:41:36

+0

你能列出完整的命令吗? – Automatico 2015-11-19 19:14:48