Команда, чтобы увидеть, находится ли слово в списке файлов и выводит, сколько файлов оно находится в

У меня уже есть аналогичный вопрос, но у меня есть небольшая разница. Я хочу посмотреть, сколько файлов содержит каждое слово. Когда файл имеет слово, он увеличивает счетчик и затем переходит к следующему файлу. Я не хочу знать, сколько раз слово появляется в каждом файле или имя файла, в котором он появляется, а просто счетчик, указывающий, сколько файлов это слово найдено в моих файлах. Например: у меня есть каталог с 10 файлами, каждый файл является рецептом, и я хочу посмотреть, сколько файлов содержит слово «соль». После выполнения команды он выдаст что-то вроде: 9 Salt . Это было обнаружено в 9 из 10 файлов. Я хочу это для каждого слова. Пока у меня это:

grep -l *| tr '[AZ]' '[az]' | tr -d '[:punct:]' | tr ' ' '\n' | sort | uniq | wc -l 

Буду признателен за любую оказанную помощь.

  • Sed для удаления между разделителями, но сохранить первый разделитель
  • Найти последнее появление строки в нескольких файлах
  • Удалите обе строки, если значения столбца A повторяются в следующей строке
  • Как я могу упростить эту команду только для использования awk?
  • Как добавить верхний и нижний колонтитулы в плоский файл
  • В верхнем регистре только первая буква каждой строки
  • Как я могу прокручивать строки файла и находить файлы, соответствующие каждой строке?
  • Лучше, чем `tee | разрезать | ... | paste`
  • 2 Solutions collect form web for “Команда, чтобы увидеть, находится ли слово в списке файлов и выводит, сколько файлов оно находится в”

    Допустим, вы создали папку рецептов в / home / username / recipes

    Вот простой скрипт:

     #!/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 salt 

    и т.п.

    Использовать 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 
    Linux и Unix - лучшая ОС в мире.