すでに私に似た質問がありますが、私の問題は少し異なります。各単語がどれだけのファイルに含まれているかを確認したいと思います。ファイルに単語が含まれている場合は、カウンタがインクリメントされ、次のファイルに移動します。各ファイルにその単語が何回表示されるのか、ファイル名にその単語が表示されるのかを知りたくありません。これは私のファイルで見つかったファイルの数を示すカウンタです。たとえば、10個のファイルを含むディレクトリがあり、各ファイルはレシピであり、「salt」という単語を含むファイルの数を確認したいと思います。コマンドを実行すると、次のような内容が出力されます。塩9個。これは、10個のファイルのうち9個で見つかるという意味です。しかし、私はすべての言葉がそうなることを願っています。これまで私はこれを持っています:
grep -l *| tr '[A-Z]' '[a-z]' | tr -d '[:punct:]' | tr ' ' '\n' | sort | uniq | wc -l
どんな助けでも大変感謝します。
答え1
レシピフォルダがあると仮定/ホーム/ユーザー名/レシピ
以下は簡単なスクリプトです:
#!/bin/bash
count=0
dir=/home/username/recipes/
for recipe in $(ls $dir); do
if [ $(cat $HOME/recipes/$recipe | grep $1) ]; then
((count++))
fi
done
echo "$count $1"
ファイルを保存して実行可能にする必要があります。これを行う:
chmod 740 script.sh
実行するときは、次のように探しているパラメータを含めます。
./script.sh salt
両方のファイルに一致する項目がある場合は、次の内容が出力されます。
2 salt
3 つのファイルに一致する項目がある場合は、次の内容が出力されます。
3 salt
など。
答え2
使用grep -c
例えば
kaustubh@hacked:~/test$ cat a
salt
salt
salt
salt
salt
kaustubh@hacked:~/test$ cat b
here sis salt
their is salt
and everywhere is salt
kaustubh@hacked:~/test$ cat c
salt hash
hash salt
sweet salt
kaustubh@hacked:~/test$ cat d
this is line salt
salt
さて、ファイルの単語数が欲しいです。grep -c salt *
kaustubh@hacked:~/test$ grep -c salt *
a:5
b:3
c:3
d:1