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
テキストを生成するパイプに置き換えます。