Как получить несколько строк, используя .txt Vocab, сопоставляя только первое слово в качестве переменной? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь уменьшить .sm file1 - около 10 ГБ, отфильтровывая его с использованием длинного набора слов (около 180,108 элементов), перечисленных в текстовом файле file2.

File1 структурирован следующим образом:

word <http://internet.address.com> 1

т.е. one word, за которым следуют a blank space, an internet address и number.

File2 - это простое .txt файл, список слов, по одному в каждой строке.

Моя цель - создать третий файл File3, содержащий только те строки в file1, первое слово которых совпадает со списком слов file2, и не обращайте внимания на все остальное.

Моя попытка заключается в следующем:

grep -w -F -f file2.txt file1.sm > file3.sm

Я также попытался сделать что-то подобное:

gawk 'FNR==NR {a[$1]; next } !($2 in a)' file2.txt  file1.sm > file3.sm

, но снет успехаЯ понимаю, что /^ и \b могут сыграть здесь роль, но я не знаю, как вписать их в синтаксис.Я много смотрел по сторонам, но, похоже, решение не подходит.

Моя проблема в том, что здесь grep читает всю строку файла file1, и может случиться так, что соответствующее слово находится в адресе веб-страницы, а я незаинтересован в выяснении.

Ответы [ 2 ]

2 голосов
/ 13 мая 2019
sed 's/^/^/' file2.txt | grep -f - file1.sm
1 голос
/ 13 мая 2019

join - лучший инструмент для этого, а не grep / awk:

join -t' ' <(sort file1.sm) <(sort file2.txt) >file3.sm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...