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

时间:2010-10-20 13:57:12

标签: linux shell filter awk

美好的贝壳爱好者!

基本上我有两个文件:

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

de 1711
a 936
et 762
la 530
les 482
pour 439
le 425
...

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

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

 au aux avec le ces dans ...

所以我想从 frequency.txt 中删除包含 stopwords.txt

上找到的单词的所有行 我怎么能这样做?我想它可以用awk来完成......比如

awk 'match($0,SOMETHING_MAGICAL_HERE) == 0 {print $0}' frequency.txt > new.txt

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

这将为你做到:

tr ' ' '\n' <stopwords.txt | grep -v -w -F -f - frequency.txt

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

如果您遇到问题,因为它是以空格分隔的,您可以使用tr用换行符替换空格:

答案 2 :(得分:3)

tr ' ' '\n' < stopwords.txt | grep -vwFf - frequency.txt

-wgrep至关重要,例如在stopwords.txt中le删除包含lelesslittle的字词。

答案 3 :(得分:2)

join -v1 <(sort frequency.txt) <(tr ' ' '\n' <stopwords.txt|sort) | sort -k2,2rn