如何使用xargs max-procs实用程序多次并行调用while语句

时间:2017-07-13 16:57:05

标签: linux bash while-loop do-while xargs

我在Linux中有一个名为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 个答案:

答案 0 :(得分:1)

xargs需要运行一个命令,这意味着您需要将循环体放入shell脚本中。类似的东西(称之为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