J'ai donc une boucle while:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Mais cela peut prendre du temps. Comment utiliser GNU Parallel pour cette boucle while?
shell-script
files
gnu-parallel
Prolétariat
la source
la source
tee
avecparallel
lors de la mise en sortiesortedstuff
? Je peux donc voir la sortie au fur et à mesure.>
par| tee
exemple la première commande devientparallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
En tant que type Unix de la vieille école "faites une chose et faites-le bien", je mettrais les trucs de substitution de chaînes dans un script wrapper:
Si vous l'appelez
wrapper.sh
, laparallel
commande pour l'appeler serait:Notez que vous n'avez pas besoin
cat
de ce genre de chose, qui enregistre un appel de programme externe.la source
Vous n'en avez pas besoin
parallel
, car le corps de la boucle ne dépend pas des itérations précédentes. Il suffit de démarrer un nouveau processus d'arrière-plan pour chaque hôte.parallel
cependant, il facilite la gestion de certains aspects; vous pouvez limiter plus facilement le nombre de travaux exécutés en parallèle.la source
wc -l live_hosts
le nombre de broches de disque ou de cœurs de processeur est supérieur au nombre - selon que la tâche est liée aux E / S ou au processeur - vous allez perdre beaucoup d'avantages que vous obtenez du parallélisme avec une solution comme celle-ci. La capacité deparallel
limiter le nombre de tâches n'est pas seulement agréable, elle est presque essentielle, si la vitesse de traitement est votre objectif.