У меня есть скрипт оболочки bash, в котором я передаю некоторые данные через 5 или 6 различных программ, а затем окончательные результаты в файл с разделителями табуляции.
Затем я делаю то же самое снова для отдельного подобного набора данных и выводлю во второй файл.
Затем оба файла вводятся в другую программу для сравнительного анализа. например, чтобы упростить
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
Мой вопрос: как я могу сделать шаги 1 и 2 запущенными одновременно (например, с помощью &), но запускать только шаг 3 (AnalysisProg), когда оба завершены?
Спасибо
ps AnalysisProg не будет работать в потоке или fifo.
scripting
parallelism
Стивен Хендерсон
источник
источник
tee
и обработать их двумя параллельнымиgrep
процессами: unix.stackexchange.com/questions/120333/…nohup
возможно, но при этом поддерживая средства связи с процессом: unix.stackexchange.com/questions/121253/…Ответы:
Использование
wait
. Например:будет:
Смотрите, например, этот вопрос .
источник
Ответ cxw, без сомнения, является предпочтительным решением, если у вас есть только 2 файла. Если эти 2 файла являются просто примерами, а у вас в действительности есть 10000 файлов, то решение «&» не будет работать, так как это приведет к перегрузке вашего сервера. Для этого вам понадобится такой инструмент, как GNU Parallel:
Чтобы узнать больше о GNU Parallel:
источник
Один из способов сделать это может выглядеть примерно так:
Таким образом, вы создаете фоновый режим для обоих конвейеров, но все еще ждете, пока они завершат выполнение, прежде чем объединить их вывод в стандартный ввод, который оценивается в данном документе и передается AnalysisProg. Если вы можете использовать
wait
это, то это даже лучше, чемwhile ps
цикл, но, в зависимости от оболочки,wait
может возражать, если вы дадите ему команду ждать процесса, который не является потомком текущей оболочки.Также обратите внимание, что вышеуказанный метод будет сопоставлять выходные данные - поэтому оба процесса будут записывать данные одновременно. Если вы хотите вместо этого разделить их или добавить друг к другу, возможно, вы можете сделать следующее:
Я продемонстрировал эти концепции раньше. Наверное, лучшие демо здесь и здесь .
источник
Попробуйте использовать это.
источник
wait
велосипед?