Ste*_*eve 2 unix command-line find
我有一个perl脚本,它将一个填充了整数的数组写入stdout,每个都在一个单独的行上.所以我会得到如下输出:
412
917
1
etc
Run Code Online (Sandbox Code Playgroud)
我想要做的是能够将此脚本的输出传递给xargs,并使用每个整数进行curl调用.像这样的东西:
cat input.json | ./jsonValueExtracter.pl -s exampleId | xargs curl http://brsitv01:8080/exampleId/$1 > example$1.json
Run Code Online (Sandbox Code Playgroud)
下面是我正在使用的简单脚本的摘录.
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);
Run Code Online (Sandbox Code Playgroud)
但是,这不符合我的预期.当我运行以下命令时:
cat input.json | perl jsonValueExtracter.pl -s exampleId | xargs echo http://brsitv01:8080/exampleId/$1
Run Code Online (Sandbox Code Playgroud)
我得到输出:
http://brsitv01:8080/exampleId/ 412 917 1
Run Code Online (Sandbox Code Playgroud)
在xargs中使用perl脚本的输出我需要做些什么特别的事情吗?
谢谢
xargs不会像这样使用$ 1.$ 1是空白的,xargs只是将数字放在命令行的末尾.
您可能希望使用bash for循环:
for i in `./jsonValueExtracter.pl -s exampleId < input.json`
do
curl http://brsitv01:8080/exampleId/$i > example$i.json
done
Run Code Online (Sandbox Code Playgroud)
哪个可以用分号写在一行:
for i in `./jsonValueExtracter.pl -s exampleId < input.json`; do curl http://brsitv01:8080/exampleId/$i > example$i.json; done
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要猫:
cat [file] | script.foo
Run Code Online (Sandbox Code Playgroud)
相当于:
script.foo < [file]
Run Code Online (Sandbox Code Playgroud)