Comando para ver se uma palavra está em uma lista de arquivos e mostra quantos arquivos ela contém

0

Já existe uma questão semelhante à minha, mas a minha tem uma pequena diferença. Eu quero ver quantos arquivos contêm cada palavra. Quando um arquivo tem uma palavra, ele incrementa o contador e continua no próximo arquivo. Eu não quero saber quantas vezes a palavra aparece em cada arquivo ou o nome do arquivo em que aparece, apenas um contador dizendo quantos arquivos a palavra é encontrada em meus arquivos. Por exemplo: Eu tenho um diretório com 10 arquivos, cada arquivo é uma receita e eu quero ver quantos arquivos contêm a palavra 'salt'. Depois de executar o comando, ele produziria algo como: 9 Salt . O que significa que foi encontrado em 9 de 10 arquivos. Eu quero isso para everyword embora. Até agora eu tenho isso:

 grep -l *| tr '[A-Z]' '[a-z]' | tr -d '[:punct:]' | tr ' ' '\n' | sort | uniq | wc -l

Qualquer ajuda é muito apreciada.

    
por Demostroyer 11.12.2014 / 13:17

2 respostas

1

Digamos que você tenha a pasta de receitas em / home / username / recipes

Aqui está um script simples:

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

Depois de salvar o arquivo, você precisa torná-lo executável. Faça isso com:

chmod 740 script.sh

Quando você executá-lo, inclua o argumento que você está procurando, assim:

./script.sh salt

Se corresponder a dois arquivos, será exibido:

2 salt

Se corresponder a três arquivos, a saída será:

3 salt

etc.

    
por 11.12.2014 / 13:41
1

Use grep -c

Por exemplo

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

Agora quero contar a palavra salt nos arquivos: grep -c salt *

kaustubh@hacked:~/test$ grep -c  salt *
a:5
b:3
c:3
d:1
    
por 11.12.2014 / 13:35