Trouver des files qui ont des mots en commun

Quelle serait la meilleure façon de créer une list de files qui ont des mots communs avec un file donné. Par exemple, si j'avais:

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

et je voulais listr tous les files dans le cwd contenant l'un des mots dans mainFile . Quelle serait la meilleure façon de procéder?

Étant donné que le nombre de mots par ligne dans mainFile n'est pas constant, je trouvais des solutions à l'aide d'un cut . J'essayais de créer une corde à partir des mots et de les placer séparés par | dans une command grep -l "exquisite|malicious|etc" * . Je suis ouvert à toute méthode bien que cela pourrait être mieux.

Générez d'abord des indices pour mainFile,

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

Ensuite, faites un grep pour les strings fixes:

grep -F -f mainFile.idx file*

Si votre grep supporte l'option non-standard -w (pour les mots correspondants):

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

utilisez ce code:

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

ARUN