如何仅使用grep和wc命令统计文件中唯一单词的数量?
仅用grep和wc统计文件中唯一单词数量的可行方案?
问题描述
需求是仅使用grep和wc命令统计文件中唯一单词的数量。此前尝试过以下两种方法,但不符合仅用grep和wc的要求:
grep -oE '\w+' 'file.txt' | sort | uniq | wc -l grep -oE '\w+' 'file.txt' > temp.txt && awk '!seen[$0]++' temp.txt | wc -l
示例输入文件内容:
one two three four five two four one six eight three seven five
预期输出:unique word count: 8
疑问:是否可以先通过grep -oE '\w+' file.txt提取单词,再逐个将单词与空文件匹配,若文件中无该单词则追加,以此实现去重?能否仅用grep完成此逻辑?
结论:仅靠grep和wc无法实现唯一单词统计
grep是基于模式匹配的文本搜索工具,本身不具备状态记忆、循环判断或文件写入的能力,而去重的核心是需要跟踪已经出现过的单词——这一步必须依赖shell的循环逻辑、或者sort/uniq/awk这类具备状态记录的工具,仅用grep做不到。
对你提出的去重逻辑的回应
你设想的“逐个匹配空文件并追加未出现单词”的逻辑,本质上需要三个核心步骤:
- 遍历每个提取出的单词
- 检查该单词是否已存在于临时文件中
- 若不存在则追加写入
其中,遍历、条件判断和文件写入都是shell本身的功能,而非grep的能力。即使你用grep来完成“检查单词是否存在”的步骤,整个流程也必须依赖shell循环,还需要用到echo之类的写入命令,已经超出了“仅用grep和wc”的限制。
补充说明
如果严格限制只能使用grep和wc,目前没有可行的方法完成唯一单词统计。因为去重环节必须依赖具备去重/状态记录能力的工具,而grep仅能做模式匹配,wc仅能做计数,两者都不具备去重所需的状态跟踪能力。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

