J'ai un script shell bash dans lequel je canalise des données via environ 5 ou 6 programmes différents, puis les résultats finaux dans un fichier délimité par des tabulations.
Je refais ensuite la même chose pour un ensemble de données similaire distinct et je le renvoie dans un deuxième fichier.
Ensuite, les deux fichiers sont entrés dans un autre programme pour une analyse comparative. par exemple pour simplifier
Data1 | this | that |theother | grep |sed | awk |whatever > Data1Res.csv
Data2 | this | that |theother | grep |sed | awk |whatever > Data2Res.csv
AnalysisProg -i Data1res.csv Data2res.csv
Ma question est: comment puis-je faire fonctionner step1 et step2 en même temps (par exemple en utilisant &) mais lancer uniquement step3 (AnalysisProg) lorsque les deux sont terminés?
THX
ps AnalysisProg ne fonctionnera pas sur un flux ou fifo.
scripting
parallelism
Stephen Henderson
la source
la source
tee
et la traiter avec deuxgrep
processus simultanés : unix.stackexchange.com/questions/120333/…nohup
, mais en conservant un moyen de communiquer avec le processus: unix.stackexchange.com/questions/121253/…Réponses:
Utilisez
wait
. Par exemple:volonté:
Voir, par exemple, cette question .
la source
La réponse de cxw est sans aucun doute la solution préférable, si vous n'avez que 2 fichiers. Si les 2 fichiers ne sont que des exemples et que vous avez en réalité 10000 fichiers, la solution '&' ne fonctionnera pas, car cela surchargerait votre serveur. Pour cela, vous avez besoin d'un outil comme GNU Parallel:
Pour en savoir plus sur GNU Parallel:
la source
Une façon de procéder pourrait ressembler à ceci:
De cette façon, vous mettez en arrière plan les deux pipelines mais attendez toujours qu'ils finissent de s'exécuter avant de combiner leur sortie dans stdin qui est évalué dans un document ici et remis à AnalysisProg. Si vous pouvez l'utiliser,
wait
c'est encore mieux que lawhile ps
boucle, mais, en fonction du shell, vouswait
pouvez vous opposer si vous lui demandez d'attendre un processus qui n'est pas un enfant du shell actuel.Notez également que la méthode ci-dessus collationnera la sortie - donc les deux processus seront écrits en même temps. Si vous vouliez plutôt les séparer ou les ajouter les uns aux autres, vous pourriez peut-être faire:
J'ai déjà démontré ces concepts auparavant. Les meilleures démos sont probablement ici et ici .
la source
Essayez d'utiliser ceci.
la source
wait
la roue?