Как найти слова из одного файла в другой файл?
в одном текстовом файле у меня есть 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