ルックアップ ファイルの長い行で grep がパターン ファイルから短いパターンを検出する場合、長いパターン内にあるルックアップ ファイルの短い行を抽出できるツールが必要です。
言い換えれば、1 行に 1 文のシェイクスピアの作品があり、フランス語の辞書を例にとると、シェイクスピアのどの行にどのフランス語の単語が含まれているかを調べて、シェイクスピアの行に複数の文が含まれている可能性があるという事実を検出できるようにする必要があります。フランス語の単語が 1 つ以上あること、およびフランス語の単語がシェイクスピアの複数の行に出現する可能性があること。
例えば:
pattern_file={
"The sun is shining!"
"It is a beautiful day!"}
lookup_file={
"Rain"
"Sun"
"Cloud"
"Beautiful"
"Shining"}
私が欲しいのは
function file pattern
複数の一致が検出された状態で、長いパターンで見つかった線と長いパターン自体の両方をカンマで区切って指定します。
ideal_result_file={
"Sun","The sun is shining!"
"Beautiful","It is a beautiful day!",
"Shining", "The sun is shining!"}
現在、grep を使用してルックアップ ファイル全体を 1 行ずつループ処理しています。
while read line
do
grep -is $line pattern_file | sed 's/^/'"$line"'\,/g' >> result_file.csv
done < lookup_file
これは信じられないほど遅いです!私のlookup_fileには50,000行以上が含まれていますが、私のpattern_fileには500行が含まれています.grepを使用してlookup_fileでさらに短いパターンを見つけるのに数秒かかるのに対し、ループアプローチを使用した単一のパスには数日/数週間かかります.
任意の言語でのソリューションをいただければ幸いです。
大規模なデータセットで grep または fgrep を使用した
非常に遅いループ
Perl は bash より高速ですか?
ソリューションは、GB サイズのループアップおよびパターン ファイルと互換性がある必要があります。