楼主: jxapp_493
428 0

[其他] Gemini永久会员 Shell 统计词频的方法 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-4-27
最后登录
2018-4-27

楼主
jxapp_493 发表于 2025-11-25 14:31:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

在Shell环境中,统计文本中单词出现频率有多种实现方式。以下是几种常见且实用的方法,适用于不同场景下的词频分析需求。

1. 利用 tr、sort 和 uniq 组合处理

这是基础但有效的词频统计方案:

cat file.txt | tr '[:space:]' '\n' | tr '[:upper:]' '[:lower:]' | grep -v '^$' | sort | uniq -c | sort -nr

各步骤说明如下:

  • tr '[:space:]' '\n':将所有空白字符(如空格、制表符、换行)替换为换行符,使每个单词独立成行。
  • tr '[:upper:]' '[:lower:]':将大写字母转换为小写,实现不区分大小写的统计。
  • grep -v '^$':过滤掉空行,避免干扰统计结果。
  • sort:对单词进行排序,为后续去重计数做准备。
  • uniq -c:统计相邻重复行的出现次数,即每个单词的频次。
  • sort -nr:按数值逆序排列,高频词优先显示。
tr
sort
uniq

2. 使用 awk 进行高效统计

awk 能在一个流程中完成遍历与计数,性能更优:

awk '{
for (i=1; i<=NF; i++) {
    word = tolower($i)
    freq[word]++
}
}
END {
for (word in freq) {
    printf "%d %s\n", freq[word], word
}
}' file.txt | sort -nr

该方法通过数组 freq 直接记录每个单词的出现次数,最后输出并按频次降序排列。

awk

3. 增强版:去除标点符号后再统计

若原始文本包含标点,可先清理再处理:

cat file.txt | tr -s '[:punct:][:space:]' '\n' | tr '[:upper:]' '[:lower:]' | grep -v '^$' | sort | uniq -c | sort -nr

其中 tr -s 可压缩连续的标点和空白字符为单个换行,有效分离单词。

4. 统计特定单词的出现次数

若只需查询某个词(如 "the")的频次,可用以下命令:

grep -o -i '\bthe\b' file.txt | wc -l

这里 -o 表示仅输出匹配部分,-i 忽略大小写,\b 确保匹配完整单词,防止误匹配如 "there" 中的 "the"。

5. 使用 sed 预处理文本

借助 sed 清理非字母数字字符后再进行统计:

cat file.txt | sed 's/[^a-zA-Z0-9 ]//g' | tr '[:space:]' '\n' | tr '[:upper:]' '[:lower:]' | grep -v '^$' | sort | uniq -c | sort -nr

此方式能保留字母、数字和空格,去除其余符号,适合需要保留数字词汇的场景。

sed

注意事项与优化建议

  • 上述方法默认以空白分割单词,若需复杂分词逻辑(如中文或连字符处理),建议使用专业工具。
  • 对于大型文件,awk 实现方式通常比多级管道更具效率,减少I/O开销。
  • 如需区分大小写,可省略 tr '[:upper:]' '[:lower:]' 步骤。
  • 若输入格式复杂,可结合正则表达式增强清洗能力。
perl
python
awk
tr '[:upper:]' '[:lower:]'

输出格式说明

最终输出一般为两列结构:

15 the
12 and
10 is
...

第一列为词频数值,第二列为对应单词,便于阅读或进一步处理。

42 the
   35 and
   28 to
   ...

根据实际需求选择合适的方法,并可在此基础上灵活调整参数与流程。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Shell Mini Shel Min GEM

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 20:24