Tengo un script de shell bash en el que canalizo algunos datos a través de aproximadamente 5 o 6 programas diferentes y luego los resultados finales en un archivo delimitado por tabulaciones.
Luego hago lo mismo nuevamente para un conjunto de datos similar por separado y la salida a un segundo archivo.
Luego, ambos archivos se ingresan en otro programa para un análisis comparativo. por ejemplo, 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
Mi pregunta es: ¿cómo puedo hacer que el paso 1 y el paso 2 se ejecuten al mismo tiempo (p. Ej., Usando &) pero solo iniciar el paso 3 (AnalysisProg) cuando ambos están completos?
Gracias
ps AnalysisProg no funcionará en una secuencia o quince.
scripting
parallelism
Stephen Henderson
fuente
fuente
tee
y procesarla con dosgrep
procesos concurrentes : unix.stackexchange.com/questions/120333/…nohup
podría pero manteniendo un medio de comunicación con el proceso: unix.stackexchange.com/questions/121253/…Respuestas:
Uso
wait
. Por ejemplo:será:
Ver, por ejemplo, esta pregunta .
fuente
La respuesta de cxw es sin duda la solución preferible, si solo tiene 2 archivos. Si los 2 archivos son solo ejemplos y usted en realidad tiene 10000 archivos, entonces la solución '&' no funcionará, ya que eso sobrecargará su servidor. Para eso necesitas una herramienta como GNU Parallel:
Para obtener más información sobre GNU Parallel:
fuente
Una forma de hacerlo podría ser algo como:
De esta manera, usted realiza un fondo de ambas canalizaciones pero aún espera a que terminen de ejecutarse antes de combinar su salida en stdin, que se evalúa en un documento aquí y se entrega a AnalysisProg. Si puede usar
wait
esto, es incluso mejor que elwhile ps
bucle, pero, dependiendo del shell,wait
puede objetar si le indica que espere un proceso que no es un hijo del shell actual.También tenga en cuenta que el método anterior recopilará la salida, por lo que ambos procesos se escribirán a la vez. Si, en cambio, quisiera que se separaran, o se añadieran uno a otro, posiblemente podría hacer:
He demostrado estos conceptos antes. Probablemente las mejores demos estén aquí y aquí .
fuente
Intenta usar esto.
fuente
wait
la rueda?