使用一组给定字符串搜索多个文件的更快方法

使用一组给定字符串搜索多个文件的更快方法

如何在包含许多文件(每个文件大小超过 1GB)的目录中 grep 一组给定的数字/字符串。而且我也希望它能快点。下面是我的脚本,但速度很慢:

 #!/bin/sh

echo "Report Key|Status|FileName"
SERVICE1="/dir1/dir2/file.csv"
FINDCMD1='"sting1":"'
FINDCMD2='"'
for i in $(cat $SERVICE1);

do
#echo "$i"
FINALFINDCMD=$FINDCMD1$i$FINDCMD2
ORACLEFINALFIND=$ORACLEFINDCMD$i$FINDCMD2
SERVICE2=$(cd /dir1/dir2 && find . -type f -print0 | xargs -n1000 -r0P3 grep $FINALFINDCMD| grep "string2")
if [[ $SERVICE2 = *"string2"* ]]; then
SERVICE3=$(echo $SERVICE2 | cut -c73-115)
        echo "$i|report found|$SERVICE3"
fi
else
    echo "$i|report not found"
fi
  let i++
done 

假设:file.csv 有以下数字:

123456
234567
345678

该脚本单独接收这些报告,并在 dir2 中的文件中对它们进行 grep(请参阅上面代码中的 SERVICE2)。然后打印是否找到数字/报告。如果是,它会打印在哪个文件中找到该号码。

答案1

使用grep

grep -f /dir1/dir2/file.csv /dir1/dir2/*

这将从您的.csv文件中提取模式并在位于 的文件中搜索它们/dir1/dir2。我建议不要将您的 .csv 放在您要搜索的同一目录中,否则它将是匹配的。如果您想在grep中递归搜索,dir2请添加该标志。-r

答案2

如果你想在一个目录的所有文件中 grep 一个模式。您可以使用 grep 命令本身来完成此操作。

例子:

grep -Hnr "pattern" folderPath

让我知道这是否是您想要的。

相关内容