Encontre arquivos que tenham palavras em comum

4

Qual seria a melhor maneira de criar uma lista de arquivos que tenham palavras comuns com um determinado arquivo? Por exemplo, se eu tivesse:

$ ls
  mainFile  file1  file2  file file4
$ cat mainFile
  exquisite malicious sentient pulsating
  perspicacious one
  tawdry fumigate Baryshnikov O'connor

e eu queria listar qualquer um dos arquivos no cwd que continha qualquer uma das palavras em mainFile . Qual seria a melhor maneira de fazer isso?

Como o número de palavras por linha em mainFile não é constante, eu estava encontrando soluções usando cut um pouco complicado. Eu estava tentando criar uma string com as palavras e colocá-las separadas por | em um comando grep -l "exquisite|malicious|etc" * . Estou aberto a qualquer método que possa ser melhor.

    
por stariz77 04.11.2012 / 11:41

3 respostas

6

Primeiro, gere índices para mainFile,

sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx

Em seguida, faça um grep para sequências fixas:

grep -F -f mainFile.idx file*

    
por 04.11.2012 / 11:46
2

Se o seu grep suportar a opção não padrão -w (para palavras correspondentes):

grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*
    
por 04.11.2012 / 18:10
1

use este código:

    for pattern in 'cat mainfile'
    do
    grep -l "$pattern" file*
    done

ARUN

    
por 04.11.2012 / 12:33