【发布时间】: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