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

命令行统计文本词频时每行同一单词仅统计1次的方案求助

大文件适配的行去重关键词统计方案

核心实现(awk流式处理,适合大规模数据集)

awk是纯流式处理工具,逐行读取文件不会加载全量数据到内存,内存占用稳定不受文件大小限制,非常适合GB/TB级的大文本处理,命令如下:

awk '
# 可根据需求调整预统计的关键词列表,也可以删除BEGIN块统计所有出现的单词
BEGIN {
    target["promoter"] = 1
    target["intron"] = 1
    target["Intergenic"] = 1
}
{
    delete hit # 清空当前行的命中标记
    for (i = 1; i <= NF; i++) {
        # 清洗单词:去除非字母的特殊符号、连字符、括号等
        gsub(/[^a-zA-Z]/, "", $i)
        word = $i
        # 匹配到目标关键词且当前行未计数过则统计
        if (word in target && !(word in hit)) {
            count[word]++
            hit[word] = 1
        }
    }
}
END {
    for (k in count) {
        printf "%s count : %d\n", k, count[k]
    }
}
' input.txt

效果验证

用你提供的示例输入运行上述命令,输出结果完全符合预期:

Intergenic count : 5
intron count : 3
promoter count : 1

扩展说明

  • 如果需要统计所有出现的单词而非预设关键词,删除BEGIN块的target定义,将匹配条件改为if (word != "" && !(word in hit))即可
  • 需要按关键词/计数排序输出的话,在命令末尾加管道| sort或者| sort -k3 -nr即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:54:03