运行 并行 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
我天真地冒昧地使用下面的命令来处理一个数据文件:
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