linux - 在 zip 文件中搜索字符串的最快 grep

标签 linux bash shell grep centos

我有一个多达 5 万个名字的列表。我需要在日志中搜索,那些在多个 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 文件中找到而不在每个日志文件中迭代等,但这些更糟糕。

最佳答案

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

关于linux - 在 zip 文件中搜索字符串的最快 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50234144/

相关文章:

linux - 我可以使用哪些标准命令在命令行上高效地打印排序输出的前几行?

linux - 需要用一个变量比较两个字符串

linux - AWS - 访问卷并修复自己的文件夹

linux - 使用 bash 创建一个具有 2 个独立 View 部分的窗口

c++ - Valgrind 的地 block 工具不会分析我的应用程序

arrays - 剖析这段代码,解释 - 检查数组是否是另一个数组的子集

bash - 使用 bash 脚本在 hadoop 中压缩不同的目录

linux - 使用 shell 脚本创建多个目录

arrays - 如何将数组传递给函数并且对数组的更新反射(reflect)在函数之外

linux - 如何在 Linux 中创建 shell 命令,如 : hh. sh filename -e -c?