文字列を含む複数のサブフォルダには多くのファイルがありますtype="abc_
。どのように多くのバリエーションがあるのか分かりません。したがって、abc_
私のファイルに不明な項目が何回表示されるかを知りたいです。type="abc_
私は以下を含む行のようなものを取得したいと思います。
"type="abc_0815 found 50 times
"type="abc_0816 found 32 times
...
and so on.
私がこうすれば:
grep -rni 'type="abc_' * | wc
私はそれが14905回発生するのを見ましたtype="abc_
。
誰でも私を助けることができますか?
答え1
find
これはファイルのリストを取得して渡し、cat
出力を解析するために使用されますawk
。
find . -type f |
xargs -I xx cat "xx" | awk '/type="abc_/{
for(i=1;i<=NF;i++){
if($i~/type="abc_/){ d[$i]++ } } }
END{ for(i in d){ print i"\tfound",d[i],"times." } }'
type="abc_4 found 1 times.
type="abc_3 found 2 times.
type="abc_6 found 1 times.
type="abc_2 found 2 times.
type="abc_10 found 3 times.
type="abc_5 found 1 times.
単にコンテンツを検索する代わりに検索を使用するため、cat *
コンテンツ検索にはより柔軟性があります。
xargs .. cat | ..
に短縮することができるfind . -type f -exec cat {} + | awk ..
答え2
-c
フラグを追加し、grepにそれを計算させます。
0個の結果が多すぎる場合は、awkを使用してフィルタリングできます。
grep -rnic 'type="abc_' * | awk -F: '$NF>0'
答え3
次のようにしてみてください。
grep -rni 'type="abc_' * |sed -n "s/.*\(abc_[0-9]*\).*/\1/p"|uniq -c| sed "s/\(.*\)\(abc.*\)/\2 found \1 times/"