複数の文字列をgrepし、行数を計算し、各文字列の出力をエコーし​​ます。

複数の文字列をgrepし、行数を計算し、各文字列の出力をエコーし​​ます。

次のように構成されたファイルディレクトリがあります。

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の詳細を把握することはあなたに任せます。

おすすめ記事