我需要逐行读取文件并将字符串作为变量传递,以便脚本并行运行。
前任:
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