すべてのパターンがファイルにあることを確認する

すべてのパターンがファイルにあることを確認する

patterns.txt私が1つあり、これらのパターンがそれぞれ特定のファイルに存在することを確認したいとします。

次のようにできます。

for pattern in $(cat patterns.txt); do 
  if ! grep -q "$pattern" file.txt; then
    echo "Error: missing pattern $pattern"
  fi
done
echo "All patterns found"

ただし、これはfile.txt各パターンを再検索する必要があるため非効率的です。潜在的に大きなパイプのストリーム内のファイルにパターンが見つからなかった場合、状況はそれほど単純ではありません。

grep確認する方法(または他のツール)がありますか?みんなパターンが存在するか?

ベストアンサー1

cat file.txt | awk '
    NR == FNR {seen[$0] = 0; next} 
    {for (p in seen) if ($0 ~ p) seen[p]++} 
    END {
        for (p in seen) 
            if (seen[p] == 0) {
                missing++
                print "missing pattern", p
            } 
        if (missing == 0) print "all found"
        exit missing
    }
' patterns.txt -

command をcatテキストを生成するパイプに置き換えます。

おすすめ記事