如何使用grep、sed、awk仅保留句子文件中存在于词典文件的单词
终端命令实现过滤句子仅保留词典内单词
推荐使用awk实现,逻辑清晰且执行效率高,即使处理大文件也能保持较好的性能,命令如下:
awk 'NR==FNR {dict[$1]=1; next} {line=""; for(i=1;i<=NF;i++) if(dict[$i]) line = line " " $i; sub(/^ /,"",line); print line}' dict.txt input.txt
你只需要把命令中的dict.txt替换为你的词典文件路径,input.txt替换为你的句子文件路径即可。
命令逻辑说明
NR==FNR {dict[$1]=1; next}:优先处理第一个输入的词典文件,将每行的单词作为键存入字典dict,值设为1标记存在,处理完词典文件的每一行后直接跳转下一行,不执行后续逻辑。{line=""; for(i=1;i<=NF;i++) if(dict[$i]) line = line " " $i}:处理第二个输入的句子文件时,初始化空字符串存储当前行的过滤结果,遍历当前行的每一个单词,仅当单词存在于词典中时才拼接到结果字符串中。sub(/^ /,"",line); print line:去掉结果字符串开头多余的空格,输出最终的过滤后行。
其他说明
如果你的句子单词之间不是用空格分隔,而是用其他符号(比如逗号、顿号等),可以在awk开头设置字段分隔符,比如要按逗号分割的话,命令开头改为awk -F, '...'即可。
内容的提问来源于stack exchange,提问作者Roger Zak
相关产品推荐
相关产品推荐

