如何将变量从文本文件逐行传递到并行脚本中

如何将变量从文本文件逐行传递到并行脚本中

我需要逐行读取文件并将字符串作为变量传递,以便脚本并行运行。

前任:

14
43
57

位于 foo.txt 中

如果我 var=$(cat foo.txt) 那么我可以在脚本内部使用这个 $var ,但是如何调用并行来为运行脚本的每个实例更改此变量?

答案1

如果你真的想要设置一个变量:

parallel -a foo.txt 'myvar={}; myscript'

但除此之外,我认为汤姆的解决方案将是您大多数时候想要的。

答案2

您还可以将 GNU Parallel 与 -a 标志一起使用,该标志从文件中读取。

parallel -a foo.txt echo
14
43
57

这不是最优雅的示例,但它只会针对文本文件中的所有参数(逐行)运行相同的命令。包含 -j 标志以指定并行运行的进程数。

答案3

您可以使用参数

例如:输入 -input.txt

1
2
3
4

要运行的命令command.sh

#/bin/bash
echo  $1: start
date
sleep 2s
echo  $1 : stop
date 

并行运行:

➜  /tmp  cat input.txt| xargs -n 1 -P 4 ./command.sh
1: start
3: start
2: start
4: start
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
Tue May 19 19:03:30 IDT 2015
1 : stop
4 : stop
3 : stop
2 : stop
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015
Tue May 19 19:03:32 IDT 2015

相关内容