指定された文字列セットを使用して複数のファイルを検索するより高速な方法

指定された文字列セットを使用して複数のファイルを検索するより高速な方法

多くのファイル(各ファイルサイズが1 GB以上)を含むディレクトリから、指定された数値/文字列セットをどのように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のファイルに保存します(上記のコードのSERVICE2を参照)。その後、番号/レポートが見つかったら印刷します。その場合は、番号が見つかったファイルを印刷します。

答え1

使用grep:

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

これにより、.csvファイルからパターンが抽出され、ファイル内のパターンが検索されます/dir1/dir2。 .csvを検索しているディレクトリに入れないことをお勧めします。それ以外の場合は一致します。 grepで再帰的に検索するには、dir2このフラグを追加してください。-r

答え2

ディレクトリ内のすべてのファイルにわたってパターンを把握したい場合。 grepコマンド自体を使用してこれを実行できます。

例:

grep -Hnr "pattern" folderPath

これがあなたが望むものであるかどうか教えてください。

関連情報