用于过滤文件上禁止的单词的shell

ple*_*ong 4 linux shell awk filter

美好的贝壳爱好者!

基本上我有两个文件:

frequency.txt :(多行,包含单词和频率的空格分隔文件)

de 1711
a 936
et 762
la 530
les 482
pour 439
le 425
...
Run Code Online (Sandbox Code Playgroud)

我有一个包含"禁止"字样的文件:

stopwords.txt :(一行,空格分隔文件)

 au aux avec le ces dans ...
Run Code Online (Sandbox Code Playgroud)

所以我想从frequency.txt中删除包含在stopwords.txt上找到的单词的所有行

我怎么能这样做?我在想它可以用awk完成......就像

awk 'match($0,SOMETHING_MAGICAL_HERE) == 0 {print $0}' frequency.txt > new.txt
Run Code Online (Sandbox Code Playgroud)

但我不确定......任何想法?提前thxs

gho*_*g74 6

$ awk 'FNR==NR{for(i=1;i<=NF;i++)w[$i];next}(!($1 in w))' stop.txt freq.txt
de 1711
a 936
et 762
la 530
les 482
pour 439
Run Code Online (Sandbox Code Playgroud)


Mic*_*eyn 5

这将为您做到:

tr ' ' '\n' <stopwords.txt | grep -v -w -F -f - frequency.txt
Run Code Online (Sandbox Code Playgroud)

-v是反转匹配
-w是仅用于整个单词匹配
-F是表示该模式是一组换行符分隔的固定字符串
-f从stopwords.txt文件中获取模式字符串

如果你遇到麻烦,因为它是空格分隔的,你可以使用tr用换行替换空格: