我的脚本使用data.table
逐行处理一些文件。
当我这样做时:
while read
我的结果很好。
但是尝试使用gnu head -n5 file1 | ./myscript.sh
来并行化它:
parallel
将head -n5 file1 | parallel -j 4 ./myscript.sh
个文件空了!?
我也尝试过:
result
但仍然无效。我试图做与他们所说的相似的事情 文档,但没有任何成功。 我做错了什么?
修改
也许这会有所帮助:
parallel -j 4 -a file1 ./myscript.sh
答案 0 :(得分:4)
parallel
不会将输入行发送到给定命令的stdin
,但会将该行附加到您给出的命令。
如果您按照自己的意愿撰写,那么您就可以有效地拨打./myscript.sh <INPUT>
,呼叫./myscript.sh
,并将输入发送为stdin
。
这应该有效:
head -n5 file1 | parallel -j 4 "echo {} | ./myscript.sh"
{}
向parallel
表示您希望输入的位置,而不是最后的默认值。
答案 1 :(得分:4)
- 为您制作管道:
cat file1 | parallel --pipe -N5 ./myscript.sh
但您需要更改myscript.sh
,以便它不会保存到result
,而是将输出打印到stdout。然后你可以:
cat file1 | parallel --pipe -N5 ./myscript.sh > result
并避免任何混合。