2009-11-16 5 views
2

J'ai un script perl qui écrit un tableau rempli d'entiers sur stdout, chacun sur une ligne séparée. Alors j'obtenir une sortie comme:Comment puis-je exécuter une commande curl pour chaque ligne de sortie de mon script Perl?

412 
917 
1 
etc 

Ce que je voudrais faire est d'être en mesure de diriger la sortie de ce script dans xargs, et faire un appel en utilisant chaque boucle entier. Quelque chose comme ceci:

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

Voici un extrait d'un script simple que j'utilise.

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); 

Cependant, cela ne fonctionne pas comme je le pensais. Quand je lance la commande suivante:

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

Je reçois la sortie:

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

Est-ce que je dois faire quelque chose de spécial à utiliser la sortie d'un script perl dans xargs?

Merci

+0

note: utilisation inutile de 'cat':' perl jsonValueExtracter.pl -s exampleId

Répondre

5

xargs n'utilise pas 1 $ comme ça. $ 1 est vide et xargs place simplement les chiffres à la fin de la ligne de commande.

Vous voulez probablement utiliser un bash pour la boucle comme:

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

qui peut être écrit sur une ligne avec des points-virgules:

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

Notez que vous n'avez pas besoin chat:

cat [file] | script.foo 

équivaut à:

script.foo < [file] 
+0

Excellent conseil. Je vous remercie. – Steve

5

Ajouter -n 1 à xargs pour le rendre manger un seul argument sur chaque course.

+0

Super, travaillé comme un charme. Merci – Steve

+0

Pouvez-vous lister la commande complète, s'il vous plaît? – Automatico

Questions connexes