美好的贝壳爱好者!
基本上我有两个文件:
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提前
答案 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
-w
到grep
至关重要,例如在stopwords.txt中le
删除包含le
或less
等little
的字词。
答案 3 :(得分:2)
join -v1 <(sort frequency.txt) <(tr ' ' '\n' <stopwords.txt|sort) | sort -k2,2rn