ファイルリストに単語があることを確認し、その単語がいくつのファイルにあるかを出力するコマンド

ファイルリストに単語があることを確認し、その単語がいくつのファイルにあるかを出力するコマンド

すでに私に似た質問がありますが、私の問題は少し異なります。各単語がどれだけのファイルに含まれているかを確認したいと思います。ファイルに単語が含まれている場合は、カウンタがインクリメントされ、次のファイルに移動します。各ファイルにその単語が何回表示されるのか、ファイル名にその単語が表示されるのかを知りたくありません。これは私のファイルで見つかったファイルの数を示すカウンタです。たとえば、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

関連情報