J'utilise xargs
avec l'option --max-args=0
(alternativement -P 0
).
Cependant, la sortie des processus est fusionnée dans le stdout
flux sans tenir compte de la séparation de ligne appropriée. Je vais donc souvent me retrouver avec des lignes telles que:
<start-of-line-1><line-2><end-of-line-1>
Comme j'utilise egrep
avec ^
dans mon modèle sur la xargs
sortie entière, cela gâche mon résultat.
Existe-t-il un moyen de forcer l' xargs
écriture des sorties de processus dans l'ordre (n'importe quel ordre, tant que la sortie d'un processus est contiguë)?
Ou une autre solution?
Modifier: plus de détails sur le cas d'utilisation:
Je souhaite télécharger et analyser des pages Web à partir de différents hôtes. Comme chaque page prend environ une seconde à charger et qu'il y a quelques dizaines de pages, je veux paralléliser les demandes.
Ma commande a la forme suivante:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
J'utilise bash et pas quelque chose comme Perl car les adresses IP hôtes (la variable $ IPs) et certaines autres données proviennent d'un fichier bash inclus.
xargs
ne semble pas offrir une telle fonctionnalité.
make
la fonction de travail de, je pense que make
les lignes de sortie sont correctement fusionnées.
--line-buffered
drapeau pour egrep
aider
xargs
.