Eu tenho um script de shell bash no qual canalizo alguns dados por cerca de 5 ou 6 programas diferentes e, em seguida, os resultados finais em um arquivo delimitado por tabulação.
Em seguida, faço o mesmo novamente para um conjunto de dados semelhante separado e saio para um segundo arquivo.
Em seguida, os dois arquivos são inseridos em outro programa para análise comparativa. por exemplo, para simplificar
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
Minha pergunta é: como posso executar as etapas 1 e 2 ao mesmo tempo (por exemplo, usando &), mas apenas inicio a etapa3 (AnalysisProg) quando ambas estiverem concluídas?
valeu
ps O AnalysisProg não funcionará em um fluxo ou em um fifo.
scripting
parallelism
Stephen Henderson
fonte
fonte
tee
e processá-lo com dois concorrentesgrep
processos: unix.stackexchange.com/questions/120333/...nohup
força, mas ainda manter um meio de comunicação com o processo: unix.stackexchange.com/questions/121253/...Respostas:
Use
wait
. Por exemplo:vai:
Veja, por exemplo, esta pergunta .
fonte
A resposta da cxw é sem dúvida a solução preferível, se você tiver apenas 2 arquivos. Se os 2 arquivos são apenas exemplos e, na realidade, você possui 10000 arquivos, a solução '&' não funcionará, pois isso sobrecarregará o servidor. Para isso, você precisa de uma ferramenta como o GNU Parallel:
Para saber mais sobre o GNU Parallel:
fonte
Uma maneira de fazer isso pode ser algo como:
Dessa maneira, você coloca em segundo plano os dois pipelines, mas ainda espera que eles concluam a execução antes de combinar sua saída no stdin, que é avaliada em um documento aqui e entregue ao AnalysisProg. Se você pode usar
wait
isso, é ainda melhor que owhile ps
loop, mas, dependendo do shell,wait
pode se opor se você o instruir a aguardar um processo que não é filho do shell atual.Observe também que o método acima agrupará a saída - portanto, os dois processos serão gravados de uma só vez. Se você os quisesse separados ou anexou um ao outro, possivelmente poderia:
Eu já demonstrei esses conceitos antes. Provavelmente as melhores demos estão aqui e aqui .
fonte
Tente usar isso.
fonte
wait
a roda?