如何使用.txt vocab grep多行,仅匹配第一个单词作为变量?

时间:2019-05-13 08:35:52

标签: grep

我正尝试通过使用文本文件.sm中列出的相当长的一组单词(约180.108项)对file1 file2进行过滤,将其减少约10 GB。

File1的结构如下:

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

one word后跟a blank spacean internet addressnumber

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 个答案:

答案 0 :(得分:2)

sed 's/^/^/' file2.txt | grep -f - file1.sm

答案 1 :(得分:1)

join是最好的工具,而不是grep / awk

join -t' ' <(sort file1.sm) <(sort file2.txt) >file3.sm