运行 并行 sed

Running sed in parallel

我天真地冒昧地使用下面的命令来处理一个数据文件:

cat old.one | parallel --pipe 'sed -r "s/\./\,/g"' > new.one

目标是将 "."" 替换为 ","。但是生成的文件 与通过顺序处理获得的文件 不同 :

sed -r "s/\./\,/g" old.one > new.one

也许并行工作可以以不同的方式完成?这里最好不要信号量,只在最后组合部分。

解决方案

非常感谢!这是我的结果:

  • sed: 13.834 秒

    sed -r "s/./\,/g" old.one > new.one

  • 并行 sed:12.489 秒

    猫old.one |并行-k --pipe 'sed -r "s/./\,/g"' > new.one

  • tr: 6.480 秒

    猫old.one | tr“。” "," > new.one

  • 平行 tr: 5.848 秒

    猫new.one |并行-k --pipe tr“。” "," > old.one

这好像不是特别适合并行处理的问题。但是,您可以拆分原始文件,并行处理各个部分,然后合并结果。

如果这能正常工作 (-j1):

cat old.one | parallel -j1 --pipe 'sed -r "s/\./\,/g"' > new.one

那么这应该可以工作 (-k):

cat old.one | parallel -k --pipe 'sed -r "s/\./\,/g"' > new.one

--pipe 非常慢,所以如果速度很重要,请使用 --pipe-part 和合适的块大小:

parallel -a old.one -k --block 30M --pipe-part 'sed -r "s/\./\,/g"' > new.one