运行 bash 使用 gnu 并行的脚本
Running bash script using gnu parallel
我的脚本使用 while read
逐行处理一些文件..
当我这样做时:
head -n5 file1 | ./myscript.sh
我的成绩很好。
但尝试使用 gnu 对其进行并行化 parallel
:
head -n5 file1 | parallel -j 4 ./myscript.sh
生成 result
文件为空!?
我也尝试过:
parallel -j 4 -a file1 ./myscript.sh
但还是不行。我试图做类似于他们所说的
文档,但没有任何成功。
我做错了什么?
编辑:
也许这可以帮助:
head -n5 file1 | parallel -a - -j 4 echo #this works
head -n5 file1 | parallel -a - -j 4 ./myscript #this doesn't
parallel
不会将输入行发送到给定命令的 stdin
,而是将行附加到您提供的命令。
如果你像你那样写,那么你实际上是在调用 ./myscript.sh <INPUT>
,你想调用 ./myscript.sh
,并将输入发送为 stdin
.
这应该有效:
head -n5 file1 | parallel -j 4 "echo {} | ./myscript.sh"
{}
指示 parallel
您希望输入的位置,而不是最后的默认值。
--pipe是为你量身定做的:
cat file1 | parallel --pipe -N5 ./myscript.sh
但是您需要更改 myscript.sh
,这样它就不会保存到 result
,而是将输出打印到标准输出。那么你可以:
cat file1 | parallel --pipe -N5 ./myscript.sh > result
并避免任何混合。
我的脚本使用 while read
逐行处理一些文件..
当我这样做时:
head -n5 file1 | ./myscript.sh
我的成绩很好。
但尝试使用 gnu 对其进行并行化 parallel
:
head -n5 file1 | parallel -j 4 ./myscript.sh
生成 result
文件为空!?
我也尝试过:
parallel -j 4 -a file1 ./myscript.sh
但还是不行。我试图做类似于他们所说的 文档,但没有任何成功。 我做错了什么?
编辑:
也许这可以帮助:
head -n5 file1 | parallel -a - -j 4 echo #this works
head -n5 file1 | parallel -a - -j 4 ./myscript #this doesn't
parallel
不会将输入行发送到给定命令的 stdin
,而是将行附加到您提供的命令。
如果你像你那样写,那么你实际上是在调用 ./myscript.sh <INPUT>
,你想调用 ./myscript.sh
,并将输入发送为 stdin
.
这应该有效:
head -n5 file1 | parallel -j 4 "echo {} | ./myscript.sh"
{}
指示 parallel
您希望输入的位置,而不是最后的默认值。
--pipe是为你量身定做的:
cat file1 | parallel --pipe -N5 ./myscript.sh
但是您需要更改 myscript.sh
,这样它就不会保存到 result
,而是将输出打印到标准输出。那么你可以:
cat file1 | parallel --pipe -N5 ./myscript.sh > result
并避免任何混合。