Unix:用于在大文件中替换单词的优化命令

时间:2014-03-18 13:46:35

标签: bash unix

此问题与任何代码问题无关。只需要你的建议。

我们有一个 ~100GB 的文件,我们正在应用 sed 来替换一些参数。 这个过程需要很长时间,并且会占用CPU

awk / tr / perl或任何其他unix实用程序替换 sed 可以在这种情况下提供帮助。

注意:

time 命令以外的任何建议。

2 个答案:

答案 0 :(得分:3)

你可以做一些事情来加快速度:

  • 在任何地方使用固定模式匹配而不是正则表达式
  • LANG=C sed '...'
  • 运行sed

这两个可能会有很大帮助。其他任何东西都会带来微小的改进,甚至是不同的工具。

关于LANG=C - 通常匹配是在您的环境设置的任何编码中完成的,这可能是UTF-8,这会导致对UTF-8字符进行额外查找。如果你的模式只使用ascii,那么一定要使用LANG = C.

您可以尝试的其他事项:

  • 如果你必须使用正则表达式然后使用最长的固定字符串 - 这将允许正则表达式引擎更快地跳过文件的非匹配部分(它将跳过更大的块)
  • 尽可能避免逐行处理 - 正则表达式引擎不必花时间寻找换行符

答案 1 :(得分:0)

尝试不同的AWK:mawk对我来说特别快。