我天真地冒险使用下面的命令来处理一个数据文件:
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 秒
猫老一| parallel -k --pipe 'sed -r "s/./\,/g"' > new.one
tr: 6.480 秒
猫老一| tr“。” ","> new.one
平行 tr:5.848 秒
cat new.one |并行-k --pipe tr“。” ","> 旧.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 并使用合适的 block 大小:
parallel -a old.one -k --block 30M --pipe-part 'sed -r "s/\./\,/g"' > new.one
关于linux - 并行运行 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36726582/