Unix/Linux 环境下统计词频:命令行工具与 Python 脚本方案
在 Unix/Linux 环境下统计文本词频的两种主流方案。第一种是纯命令行工具组合,利用 tr、sort、uniq 等核心工具实现高效轻量处理;第二种是 Python 脚本方案,适合需要复杂规则如停用词过滤的场景。文章对比了两者在性能、灵活性及学习成本上的差异,并提供了基础与进阶的代码示例。

在 Unix/Linux 环境下统计文本词频的两种主流方案。第一种是纯命令行工具组合,利用 tr、sort、uniq 等核心工具实现高效轻量处理;第二种是 Python 脚本方案,适合需要复杂规则如停用词过滤的场景。文章对比了两者在性能、灵活性及学习成本上的差异,并提供了基础与进阶的代码示例。

在 Unix/Linux 环境下统计词频,有纯命令行工具组合和**脚本语言(Python/Perl)**两种主流方案,以下是最常用的实现方式及深度分析。
利用 tr、sort、uniq、awk 等核心工具组合,无需额外依赖,适合处理文本文件或管道输入。
# 统计文件中每个单词的出现次数(默认按空格/制表符分割)
cat input.txt | tr ' ' '\n' | sort | uniq -c | sort -nr
# 处理规则:
# 1. 统一转为小写
# 2. 移除所有标点符号
# 3. 过滤空行
# 4. 按词频降序排序
cat input.txt | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr ' ' '\n' | grep -v '^$' | sort | uniq -c | sort -nr
| 工具 | 作用 |
|---|---|
tr | 字符转换:大小写转换、替换空格为换行、删除标点 |
grep -v | 反向匹配,过滤空行 |
sort | 对单词排序(为 uniq 去重做准备) |
uniq -c | 统计连续重复行的次数(必须先排序) |
sort -nr | 按数字降序排序(-n 按数值排序,-r 反向) |
适合需要复杂规则(如停用词过滤、词干提取)或集成到更大系统的场景。
import sys
from collections import Counter
import string
def count_word_frequency(file_path):
# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
# 预处理:转小写、移除标点
text = text.lower()
translator = str.maketrans('', '', string.punctuation)
text = text.translate(translator)
# 分割单词并统计
words = text.split()
word_counts = Counter(words)
# 按词频降序输出
for word, count in sorted(word_counts.items(), key=lambda x: x[1], reverse=True):
print(f"{count:4d} {word}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("用法:python word_count.py <输入文件路径>")
sys.exit(1)
count_word_frequency(sys.argv[1])
# 新增停用词过滤功能(需提前定义停用词列表)
STOP_WORDS = {'the', 'and', 'of', 'a', 'to', 'in', 'is', 'it'}
def count_word_frequency(file_path):
# ...(省略前面的预处理代码)
# 过滤停用词
words = [word for word in text.split() if word not in STOP_WORDS]
word_counts = Counter(words)
# ...(省略输出代码)
| 维度 | 命令行方案 | Python 脚本方案 |
|---|---|---|
| 性能 | 极快(C 语言实现工具) | 适中(解释型语言) |
| 灵活性 | 较低(依赖工具组合) | 极高(支持复杂逻辑) |
| 学习成本 | 需掌握多个工具参数 | 适合有 Python 基础的用户 |
| 扩展性 | 有限(难以处理复杂规则) | 无限(可集成 NLP 库) |
安全提示:处理未知来源的文本时,建议先通过
file命令检查文件类型,避免处理二进制文件导致异常。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online