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

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

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

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

  • Удалить строку с пробелами и цитатами из xml-файла
  • Как удалить команды в истории, соответствующие заданной строке?
  • Как заполнить конечные теги с помощью sed, awk или любой другой команды?
  • Извлечение жетонов из строки текста
  • Сценарий Bash - части chomp из строки
  • «Скобки не сбалансированы», хотя я избежал этого?
  • Вставьте новые строки с отсутствующими значениями (NA)
  • Создать в HTML из вывода скрипта bash
  • 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 - лучшая ОС в мире.