Как вызывать оператор while несколько раз параллельно, используя утилиту xargs max-procs
У меня есть файл с именем test.txt
в линуксе Содержание ниже.
test.txt
['table1']
['table2']
['table3']
['table4']
['table5']
and so on
Теперь у меня есть while
заявление, которое зацикливается на test.txt
Файл делает некоторые работы.
While
заявление ниже:
while read -r line; do
table=${line:2:-2}
validateTable=$(hive --database history -e "SHOW TABLES LIKE '$table'")
if [[ -z $validateTable ]]; then
/home/"$USER"/import.py "${table}"
else
/home/"$USER"/append.py "${table}"
fi
done < < test.txt
В этом while
заявление validateTable
должен проверить, присутствует ли таблица в hive
или нет.
Если нет, то это вызовет import.py
скрипт
если присутствует, он будет вызывать append.py
скрипт.
Теперь оператор while работает нормально. Я получаю ожидаемый результат.
Требование:
Что мне нужно, это я хочу призвать while statement
в параллели. Я имею в виду, я хочу while
бежать 10 раз одновременно.
Какое самое лучшее решение?
Я обнаружил, что мы можем сделать это с xargs --max-procs
вариант, но не могу понять, как его использовать.
1 ответ
xargs
для запуска требуется одна команда, а это означает, что вам нужно поместить тело цикла в скрипт оболочки. Что-то вроде (назовите это myscript
)
#!/bin/bash
table=${1:2:-2}
validateTable=$(hive --database history -e "SHOW TABLES LIKE '$table'")
if [[ -z $validateTable ]]; then
/home/"$USER"/import.py "${table}"
else
/home/"$USER"/append.py "${table}"
fi
Затем запустите что-то вроде
xargs --max-procs 10 myscript < test.txt