次のように構成されたファイルディレクトリがあります。
data/directory1/file1.xml
data/directory2/file2.xml
data/directory3/file3.xml
...
data/には、それぞれxmlファイルを含む数千のサブディレクトリがあります。
データを再帰的にスキャンし、3つのパターンを見つけ、(理想的には)各パターンの前にラベルを使用してパターン一致の数をエコーしたいと思います。だから私の結果を見たいです。
Pattern 1 = 20
Pattern 2 = 100
Pattern 3 = 432
私はこれを一度に実行するために使用できました:
grep -E -r 'Pattern 1' data/ | wc -l
grep -E -r 'Pattern 2' data/ | wc -l
grep -E -r 'Pattern 3' data/ | wc -l
今、私はこれらすべてをdata /の親ディレクトリになる1つのパラメータを使用してシェルスクリプトに入れようとしています。次に、各パターンの数を標準出力またはcount.txtとして印刷します。
ご協力ありがとうございます!
ベストアンサー1
確認してみてくださいgrep -c
。説明と一致します。さらに柔軟性が必要な場合は、次のように試してみることができますawk
(テストせずにブラウザに直接入力します)。
dir=$1
# add tests to check if $1 exists (-d) and/or is non null (-n)
find "${dir}" | awk <<\EOF
BEGIN {
pat1 = 0;
pat2 = 0;
...
}
/pattern/ { pat1 += 1;}
/otherpattern/ {pat2 += 2;}
...
END {
print "pattern", pat1;
print "otherpattern", pat2;
...
}
EOF
find
コマンドやスクリプトawk
の詳細を把握することはあなたに任せます。