用于过滤文件中的禁用词的shell

2w3rbyxf  于 2023-02-13  发布在  Shell
关注(0)|答案(4)|浏览(95)

贝壳爱好者们好!
基本上我有两个文件:

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

但是我真的不确定......有什么想法吗??谢谢你提前告诉我。

wfauudbj

wfauudbj1#

$ 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
yrwegjxp

yrwegjxp2#

这将为您做到这一点:

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

-v用于反转匹配
-w仅适用于全字匹配
-F表示模式是一组以换行符分隔的固定字符串
-f从stopwords.txt文件中获取模式字符串
如果你对此有困难,因为它是用空格分隔的,你可以用tr把空格替换成换行符:

p3rjfoxz

p3rjfoxz3#

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

-wgrep对于避免例如stopwords.txt中的le删除包含le的词(如lesslittle)至关重要。

zsbz8rwp

zsbz8rwp4#

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

相关问题