linux - 并行运行 sed

标签 linux sed parallel-processing posix gnu

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

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/

相关文章:

node.js - Node.js 中子进程之间的通信

c# - 阻塞任务?

C编程: Check if the IP address is added on any given NIC

linux - 如何在二进制文件中保留特定符号?

linux - 将运行时日志存储在文件夹中

linux - 删除行中两个符号之间的字符串

linux - Shell 脚本中的定时异步任务

regex - 如何编写 SED 脚本以使用 Regex 根据用户输入替换文件中存在的版本代码

linux - 如何删除X个字符后的所有单词

c# - 使用 Parallel.ForEach 时如何发送进度