You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计数据库表样本文本中词汇的出现次数及所在行数?

需求实现:统计词汇出现次数及所在行数

我们有一个包含数百万条记录的数据库表(source),提取到文本文件的样本数据如下:

denied the payment
 the payment successfull and incident reported successfull
 Incident is been reported

此前已通过以下命令完成词汇去重及总出现次数统计:

sed 's/ /\n/g' file|sort|uniq -c >> new.txt 

输出结果为:

denied   1
the      2
payment  2
successfull 2
Incident 2
is       1
been     1
reported 2

现在需要在上述统计基础上,额外获取每个词汇所在的行数,期望输出格式如下:

values iterationcount    countofrows

denied              1       1
the                 2       2
payment             2       2 
successfull         2       1  (该词汇虽出现2次,但仅存在于1行中)
Incident            2       2
is                  1       1
been                1       1
reported            2       2

实现方案

直接用awk处理原始文本文件,可一次性完成词汇总出现次数、所在行数的统计,命令如下:

awk '{
    for (i=1; i<=NF; i++) {
        word = $i
        count[word]++
        rows[word][NR] = 1
    }
}
END {
    printf "%-15s %15s %15s\n", "values", "iterationcount", "countofrows"
    print ""
    for (word in count) {
        row_count = length(rows[word])
        printf "%-15s %15d %15d\n", word, count[word], row_count
    }
}' file | sort

命令说明

  • 遍历每行的每个词汇:
    • count[word]++:累计词汇的总出现次数
    • rows[word][NR] = 1:用二维数组标记词汇所在的行号,同一行内重复的词汇只会被记录一次
  • 处理结束后:
    • 先打印规范的表头
    • 通过length(rows[word])获取词汇所在的总行数(二维数组的键为行号,长度即行数)
    • 最后用sort对结果按词汇排序,和原有输出格式对齐

如果需要忽略大小写(比如把Incident和incident视为同一词汇),只需在word = $i后添加word = tolower(word)即可。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:20:26