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
$ 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)
这将为您做到:
tr ' ' '\n' <stopwords.txt | grep -v -w -F -f - frequency.txt
Run Code Online (Sandbox Code Playgroud)
-v是反转匹配
-w是仅用于整个单词匹配
-F是表示该模式是一组换行符分隔的固定字符串
-f从stopwords.txt文件中获取模式字符串
如果你遇到麻烦,因为它是空格分隔的,你可以使用tr用换行替换空格: