Как найти слова из одного файла в другой файл?

в одном текстовом файле у меня есть 150 слов. У меня есть еще один текстовый файл, в котором около 100 000 строк.

как я могу проверить для каждого из слов, принадлежащих к первому файлу, будь то во второй или нет?

Я думал об использовании grep, но я не мог узнать, как использовать его для чтения каждого из слов в исходном тексте.

есть ли способ сделать это с помощью awk? Или другое решение?

Я пробовал с этой оболочкой скрипт, но он соответствует почти каждой строке:

#!/usr/bin/env sh
cat words.txt | while read line; do  
    if grep -F "$FILENAME" text.txt
    then
        echo "Se encontró $line"
    fi
done

другой способ, который я нашел:

fgrep -w -o -f "words.txt" "text.txt"

2 ответов


можно использовать fgrep -f:

fgrep -f "first-file" "second-file"

или же, чтобы соответствовать полным словам:

fgrep -w -f "first-file" "second-file"

обновление: согласно комментариям:

awk 'FNR==NR{a[];next} ( in a){delete a[]; print }' file1 file2

используйте grep следующим образом:

grep -f firstfile secondfile

ВТОРОЙ ВАРИАНТ

спасибо Эду Мортону за указание на то, что слова в файле "зарезервировано" рассматриваются как шаблоны. Если это проблема - это может быть или не быть-OP может использовать что-то вроде этого, которое не использует шаблоны:

"зарезервированы"
cat
dog
fox

и файл "текст"

The cat jumped over the lazy
fox but didn't land on the
moon at all.
However it did land on the dog!!!

awk скрипт выглядит так:

awk 'BEGIN{i=0}FNR==NR{res[i++]=;next}{for(j=0;j<i;j++)if(index(,res[j]))print }' reserved text

С вывод:

The cat jumped over the lazy
fox but didn't land on the
However it did land on the dog!!!

ТРЕТИЙ ВАРИАНТ

в качестве альтернативы это можно сделать довольно просто, но медленнее в bash:

while read r; do grep $r secondfile; done < firstfile