我有一个多达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文件中找到,而不在每个日志文件中迭代,等等,但这些更糟。
1条答案
按热度按时间kognpnkq1#
为了高效地搜索zip文件,有人建议尝试ugrep,它与grep非常相似,但也可以使用并行线程高效地搜索zip/tar/cpio/pax文件。如果找到模式匹配,则使用选项
ugrep -l -z PATTERN
生成输出结果,或者只测试ugrep -q -z PATTERN
的出口,它的出口为零(success)。在-q
的情况下,ugrep在找到模式匹配后不会继续解压缩和搜索zip文件,这应该会更快。使用选项-F
来搜索字符串而不是正则表达式。