我正尝试通过使用文本文件.sm
中列出的相当长的一组单词(约180.108项)对file1
file2
进行过滤,将其减少约10 GB。
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的行,并且可能出现匹配的单词位于网页地址中的情况,我对此一无所知。
答案 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