Как вызывать оператор 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
Другие вопросы по тегам