【问题标题】:Fastest grep to search string on zip files在 zip 文件中搜索字符串的最快 grep
【发布时间】:2018-05-08 12:53:15
【问题描述】:

我有一个包含多达 50K 个名称的列表。我需要在日志中搜索,那些在多个 zip 文件中。这些 zip 文件位于不同的文件夹中并且很大(最大 450GB)。并且一个 zip 文件中有多个文件。

现在我正在迭代每个 zip 文件和每个文件的日志文件并在其中搜索名称。

cd /disk1/ABCDEFArchive/

while read pl; do
  echo Searching $pl

  for i in 3 3-AB 3-CD 3-EF 4 4-AB 4-CD 4-EF 5 5-AB 5-CD 5-EF 
  do
    cd web$i
    for j in 2017-09 2017-10 2017-11 2017-12 2017-01 2017-02 
    do
      for k in $(unzip -l ABCDEF-${j}.zip | awk '{print $4}' | grep ABCDEF)
      do
        echo "searching $pl in   web$i ===>>> ABCDEF-${j}.zip ===>>> $k  "
        isexists=$(unzip -p ABCDEF-${j}.zip $k  | grep "=${pl}" | head -1 )
        if [[ ! -z "$isexists" ]]; then
          mysql -e "update test.product_list_tobedeleted set foundinlogs=1 where list_name =\"${pl}\";"
      echo "$pl@@@$isexists" >>${ScriptPath}/ProductlistFound.csv
          break 3   
        fi
     done
   done 
   cd ..
  done

但是一个月以来它的工作速度很慢,仍然是 3000 的名字

我还尝试了一些其他工作方法,例如在 zip 文件中查找而不在每个日志文件中进行迭代等,但这些情况更糟。

【问题讨论】:

  • 我猜你的 CPU 有限(由于解压缩了这么多数据)。您唯一能做的就是并行化(在单独的后台进程中运行外循环的块)。
  • 并行搜索不起作用或将返工。因为如果在文件中找到名称。它会跳过所有的 serachis

标签: linux bash shell grep centos


【解决方案1】:

为了有效地搜索 zip 文件,有人建议尝试ugrep,它非常类似于 grep,但也可以使用并行线程有效地搜索 zip/tar/cpio/pax 文件。如果找到模式匹配,则使用选项ugrep -l -z PATTERN 生成输出结果,或者如果找到模式匹配,则仅测试退出为零(成功)的ugrep -q -z PATTERN 的退出。在-q的情况下,ugrep在找到模式匹配后不会继续解压和搜索zip文件,应该会更快。使用选项-F 来搜索字符串而不是正则表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2017-04-03
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多