Ich habe ein Bash-Shell-Skript, in dem ich einige Daten durch ungefähr 5 oder 6 verschiedene Programme leite und dann das Endergebnis in eine tabulatorgetrennte Datei umwandle.
Ich mache dann dasselbe noch einmal für einen separaten ähnlichen Datensatz und gebe ihn in eine zweite Datei aus.
Anschließend werden beide Dateien zur vergleichenden Analyse in ein anderes Programm eingegeben. zB um zu vereinfachen
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
Meine Frage ist: Wie kann ich step1 und step2 gleichzeitig ausführen lassen (z. B. mit &), aber nur step3 (AnalysisProg) starten, wenn beide abgeschlossen sind?
Danke
ps AnalysisProg funktioniert nicht mit Streams oder Fifos.
scripting
parallelism
Stephen Henderson
quelle
quelle
tee
und mit zwei gleichzeitigengrep
Prozessen verarbeitet: unix.stackexchange.com/questions/120333/…nohup
könnte , aber immer noch ein Mittel der Kommunikation mit dem Prozess Aufrechterhaltung: unix.stackexchange.com/questions/121253/...Antworten:
Verwenden Sie
wait
. Beispielsweise:werden:
Siehe zB diese Frage .
quelle
Die Antwort von cxw ist zweifellos die bevorzugte Lösung, wenn Sie nur 2 Dateien haben. Wenn die 2 Dateien nur Beispiele sind und Sie in Wirklichkeit 10000 Dateien haben, funktioniert die '&' Lösung nicht, da dies Ihren Server überlasten wird. Dafür benötigen Sie ein Tool wie GNU Parallel:
Um mehr über GNU Parallel zu erfahren:
quelle
Eine Möglichkeit, dies zu tun, könnte etwa so aussehen:
Auf diese Weise hinterlegen Sie beide Pipelines im Hintergrund, warten aber noch, bis die Ausführung abgeschlossen ist, bevor Sie ihre Ausgabe zu stdin kombinieren, das in einem Dokument hier ausgewertet und an AnalysisProg übergeben wird. Wenn Sie dies verwenden können, ist
wait
dies sogar noch besser als diewhile ps
Schleife, kann jedoch, abhängig von der Shell, Einwände erheben,wait
wenn Sie sie anweisen, auf einen Prozess zu warten, der kein untergeordnetes Element der aktuellen Shell ist.Beachten Sie auch, dass bei der oben beschriebenen Methode die Ausgabe sortiert wird, sodass beide Prozesse gleichzeitig ausgeführt werden. Wenn Sie sie stattdessen getrennt oder aneinander angehängt haben möchten, können Sie Folgendes tun:
Ich habe diese Konzepte schon einmal demonstriert. Die wahrscheinlich besten Demos gibt es hier und hier .
quelle
Versuchen Sie dies.
quelle
wait
Rad neu erfinden ?