Mam skrypt powłoki bash, w którym przepuszczam dane przez około 5 lub 6 różnych programów, a następnie końcowe wyniki do pliku rozdzielanego tabulatorami.
Następnie robię to samo dla osobnego podobnego zestawu danych i wyprowadzam do drugiego pliku.
Następnie oba pliki są wprowadzane do innego programu do analizy porównawczej. np. w celu uproszczenia
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
Moje pytanie brzmi: w jaki sposób mogę uruchomić krok 1 i krok 2 jednocześnie (np. Używając &), ale uruchomić krok 3 (AnalysisProg) tylko wtedy, gdy oba są zakończone?
dzięki
ps AnalysisProg nie będzie działać na strumieniu lub fifo.
scripting
parallelism
Stephen Henderson
źródło
źródło
tee
i przetworzyć je za pomocą dwóch równoległychgrep
procesów: unix.stackexchange.com/questions/120333/…nohup
mógłby, ale nadal utrzymywał sposób komunikowania się z procesem: unix.stackexchange.com/questions/121253/…Odpowiedzi:
Zastosowanie
wait
. Na przykład:Wola:
Zobacz np. To pytanie .
źródło
Odpowiedź cxw jest bez wątpienia najlepszym rozwiązaniem, jeśli masz tylko 2 pliki. Jeśli 2 pliki są tylko przykładami, a w rzeczywistości masz 10000 plików, wówczas rozwiązanie „&” nie będzie działać, ponieważ spowoduje to przeciążenie serwera. Do tego potrzebujesz narzędzia takiego jak GNU Parallel:
Aby dowiedzieć się więcej o GNU Parallel:
źródło
Jednym ze sposobów na osiągnięcie tego może być:
W ten sposób opieramy się na obu potokach, ale nadal czekamy, aż zakończą działanie, zanim połączą swoje wyjście w stdin, które jest analizowane w niniejszym dokumencie i przekazywane do AnalysisProg. Jeśli możesz
wait
tego użyć, jest to nawet lepsze niżwhile ps
pętla, ale w zależności od powłokiwait
możesz sprzeciwić się, jeśli poinstruujesz ją, aby poczekał na proces, który nie jest potomkiem bieżącej powłoki.Zauważ też, że powyższa metoda zestawi dane wyjściowe - więc oba procesy będą zapisywane jednocześnie. Jeśli zamiast tego chciałbyś, aby były one oddzielone lub dołączone do siebie, możesz zrobić:
Pokazałem już te koncepcje. Prawdopodobnie najlepsze dema są tu i tutaj .
źródło
Spróbuj tego użyć.
źródło
wait
koła?