J'utilise xargsavec l'option --max-args=0(alternativement -P 0).
Cependant, la sortie des processus est fusionnée dans le stdoutflux 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 egrepavec ^dans mon modèle sur la xargssortie 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.
xargsne semble pas offrir une telle fonctionnalité.
makela fonction de travail de, je pense que makeles lignes de sortie sont correctement fusionnées.
--line-buffereddrapeau pour egrepaider
xargs.