使用gnu并行运行bash脚本

使用gnu并行运行bash脚本,bash,parallel-processing,gnu-parallel,Bash,Parallel Processing,Gnu Parallel,我的脚本在读取时使用逐行处理一些文件 当我这样做时: head -n5 file1 | ./myscript.sh 我的成绩很好 但是尝试使用gnuparallel将其并行化: head -n5 file1 | parallel -j 4 ./myscript.sh 产生结果文件为空 我也尝试过: parallel -j 4 -a file1 ./myscript.sh 但还是不行。我试着去做和他们在电影里说的相似的事情 文档,但没有任何成功。 我做错了什么 编辑: 也许这会有帮助: he

我的脚本在读取时使用
逐行处理一些文件

当我这样做时:

head -n5 file1 | ./myscript.sh
我的成绩很好

但是尝试使用gnu
parallel
将其并行化:

head -n5 file1 | parallel -j 4 ./myscript.sh
产生
结果
文件为空

我也尝试过:

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
,您想在那里调用
/myscript.sh
,并将输入作为
stdin
发送

这应该起作用:

head -n5 file1 | parallel -j 4 "echo {} | ./myscript.sh"
{}
并行
指示您希望输入的位置,而不是末尾的默认值。

--pipe是为您制作的:

cat file1 | parallel --pipe -N5 ./myscript.sh
但是您需要更改
myscript.sh
,这样它就不会保存到
result
,而是将输出打印到stdout。然后你可以:

cat file1 | parallel --pipe -N5 ./myscript.sh > result

并避免任何混合。

如果脚本正在写入结果文件,则每次都可能会覆盖它。您需要将其附加到文件中
parallel
将为每个输入行创建脚本的新实例。关于追加,您是对的,但现在我的文件中的计数器对于行中的每个增量都保持为1,因为所有这些独立进程:),无论如何,您能解释一下我上面编辑的情况吗?我不知道您指的是什么计数器;剧本是做什么的
echo
输出
,因此第一个示例应将每行打印到
stdout
。您的脚本需要在
stdin
上发送输入,而不是作为参数发送。现在parallel正在工作,但我得到了重复和错误的结果,因为在我的脚本中,我正在通过
grep
将一个文件中的单词匹配到另一个大文件上,它不是应该在每个进程中将文件分割成块,这样它们就不会混合在一起吗?脚本的每个实例将只给出一行作为输入。我真的不明白你想用这个脚本做什么。你能把它寄出去吗?