【问题标题】:Is there a way to process this code fast and what is the error of this code?有没有办法快速处理这段代码,这段代码有什么错误?
【发布时间】:2020-01-22 10:02:43
【问题描述】:

我有一个用于字符替换的代码,但我不知道该代码的错误是什么?有没有一种方法可以更快地处理这段代码,比如为此脚本专门分配几个 cpu 内核?

#!/bin/bash

startdirectory="/data/test/cpy"
searchterm="""
replaceterm=""


i=0; 

for file in $(grep -l -R $searchterm $startdirectory)
    do
      cp $file $file.bak
      sed -e s/$searchterm/$replaceterm/ig $file > tempfile.tmp
      mv tempfile.tmp $file
      let i++;

    done

【问题讨论】:

  • 在定义变量searchterm 时可能有三引号。我认为您需要转义一句话,只需尝试写:"\""
  • 除非您正在执行的处理非常密集,并且从您发布的内容来看并非如此,否则将多个 CPU 内核专用于该任务(这不是一件容易的事情)只会使 I/从磁盘到 RAM 的 O 通道 - 除非您具有与金属文件并行的访问权限。你呢?
  • 如果 $searchterm 假设为空或包含单个双引号,您能解释一下吗?如果为空,那么您的代码似乎可以简化为 ...rm -rf $startdirectory... ""
  • 由于这是按顺序执行的,因此花费了很多时间。我尝试并行运行并且它有效。谢谢。
  • 这是正确的方法。除非您正在执行的处理非常密集,并且从您发布的内容来看并非如此,否则将几个 CPU 内核专用于该任务(这不是一件容易的事情)只会使从磁盘到 RAM 的 I/O 通道过载 - 除非你有平行于金属文件的访问权限

标签: linux bash sed parallel-processing cpu


【解决方案1】:

由于这是按顺序执行的,因此花费了很多时间。我尝试以块的形式并行运行并且它起作用了。谢谢。

除非您正在执行的处理非常密集,并且从您发布的内容来看并非如此,否则将多个 CPU 内核专用于该任务(这不是一件容易的事情)只会使 I/O 通道从磁盘过载到RAM - 除非您可以并行访问金属文件。这个答案真的很有帮助

【讨论】:

  • 如果您想加快速度,请使用无需分叉的语言 cpsedmv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多