如何统计一个文本中某一个关键字出现的次数?

统计一个文本中某个关键字出现的次数,可以采用多种方法,这里分别给出在Excel和C语言中的解决方案:

在C语言中统计:

以下是一个简化的C语言程序片段,用来统计用户输入文本流中某个关键字出现的次数:

c 复制代码
#include <stdio.h>
#include <string.h>

#define MAX_WORD_LENGTH 30
#define NKEYS  /* 定义关键字表大小 */
#define KEYWORD "关键字" // 替换为你要查找的实际关键字

struct KeywordCount {
    char word[MAX_WORD_LENGTH];
    int count;
} keytab[NKEYS];

// 假设getword函数从输入流中获取下一个单词并存入word数组
// 返回值为0表示输入结束
int getword(char word[]);

int main() {
    char word[MAX_WORD_LENGTH];
    int n;

    while (getword(word) != 0 && strcmp(word, "quit") != 0) {
        if ((n = binarysearch(word, keytab, NKEYS)) >= 0) {
            keytab[n].count++;
        }
        // 如果关键字表中没有该词,则需添加到表中并初始化计数
        else if (/* 判断是否为待统计的关键字 */) {
            strcpy(keytab[n].word, KEYWORD);
            keytab[n].count = 1;
        }
    }

    // 这里假设binarysearch函数已实现查找关键字的功能
    // 并返回关键字在关键字表中的索引,若未找到则返回负数

    // 统计完成后,打印关键字出现次数
    for (int i = 0; i < NKEYS; ++i) {
        if (strcmp(keytab[i].word, KEYWORD) == 0) {
            printf("Keyword \"%s\" appears %d times.\n", KEYWORD, keytab[i].count);
            break;
        }
    }

    return 0;
}

这个C语言示例假设有一个预定义的关键字表结构体数组,并通过调用getword函数逐个读取输入的单词。当遇到待统计的关键字时,增加其在关键字表中的计数。请注意,这个例子需要自行填充实际的binarysearch函数实现及关键字处理逻辑。如果只需要统计一个固定的关键字,不需要搜索关键字表,则可以直接在循环内比较并累加计数。

在Excel中统计:

精确匹配:如果你想统计关键字在指定区域内精确出现的次数,可以使用 COUNTIF 函数。例如,如果你要在范围 A1:A5 中统计 "北京" 出现的次数,公式如下:

shell 复制代码
 =COUNTIF(A1:A5, "北京")

模糊匹配:

若要包括关键字作为子串的情况,可以在 COUNTIF 函数的条件中加入通配符星号 *。比如统计包含 "北京" 字样的单元格数量:

shell 复制代码
     =COUNTIF(A1:A5, "*北京*")

计算单个字符出现次数:

要统计特定字符(如"京")出现的总次数,可以使用 SUBSTITUTE 和 LEN 函数配合 SUMPRODUCT 函数

shell 复制代码
     =SUMPRODUCT((LEN(A1:A5) - LEN(SUBSTITUTE(A1:A5, "京", ""))))

在linux中

在Linux中,统计一个文本文件中某一个关键字出现的次数,可以使用多种命令工具来完成,以下是一些常见的方式: 使用grep与wc结合

sh 复制代码
grep -o -w "关键字" filename.txt | wc -l
  • -o 参数让grep只输出匹配到的模式(这里是"关键字"),而不是整行。
  • -w 参数确保匹配整个单词,避免部分匹配。
  • wc -l 统计输出行数,即关键字出现的次数。

使用grep的-c选项

sh 复制代码
grep -c "关键字" filename.txt
  • -c 参数会让grep直接输出文件中匹配行的数量。注意,如果一行中有多次匹配,-c会将此行算作一次。

使用awk

sh 复制代码
awk '/关键字/ {count++} END {print count}' filename.txt
  • awk脚本会在每一行匹配到"关键字"的时候增加count变量的值,最后在END块中输出总计数。

使用sed

bash 复制代码
sed -n '/关键字/=' filename.txt | wc -l
  • -n 参数使sed不打印行,而/关键字/=会匹配到关键字的行并打印行号。
  • 结合wc -l得到关键字所在行的数量,即出现次数。

使用Perl单行脚本

bash 复制代码
perl -ne 'print scalar(grep /关键字/, split /\s+/, $_);' filename.txt | wc -l
  • Perl脚本会逐行读取文件,然后按空格拆分行内容为单词列表,并使用grep函数找出含有关键字的元素,最后统计这些元素的数量。
  • 选择哪种方法取决于具体需求,比如是否区分大小写、是否要求完全匹配单词等。以上命令均假设关键字是不包含特殊正则表达式字符的普通文本。如果有正则表达式字符,请确保正确转义它们。
bash 复制代码
grep -oc '关键字' example.txt

这条命令会直接输出"关键字"在example.txt文件中出现的确切次数。不过需要注意的是,如果一行中有多个"关键字"连续或间隔出现,-o选项会使每个匹配项都被单独计算,因此在这种情况下,结果将是所有独立出现的"关键字"总数。如果希望一行中仅计算一次,那么可能需要考虑其他方案或者对关键词前后添加适当的上下文限定。

如果希望一行中仅计算一次应该怎么写呢?

如果您希望在一行中仅计算一次关键字出现的次数,即使该行中有多个重复的关键词,可以略去 -o 选项,仅使用 -c 选项来统计包含关键字的行数。以下是相应的 grep 命令:

bash 复制代码
grep -c '关键字' example.txt

这条命令会统计在 example.txt 文件中包含关键词"关键字"的行数,无论一行中有多少次出现该关键字,都会被当作一次计算。

相关推荐
wdfk_prog3 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
胡萝卜术5 小时前
RAG 的知识炼油厂:从原始网页到可检索知识块的工程化之路
面试·架构·github
wdfk_prog5 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
众人皆醒我独醉9 小时前
OpenShift RBAC 与平台安全策略:比 K8s 多出来的那几道锁,每道都是为了堵一个曾经发生过的事故
面试·kubernetes
众人皆醒我独醉10 小时前
为什么你的 RBAC 配了还是 403?—— 一套可以复现的排障方法论
面试·kubernetes
爱勇宝11 小时前
DeepSeek实习生日薪5500:真正恐怖的不是工资
人工智能·深度学习·面试
面试鸭11 小时前
面试官:“知识库搜到多少资料,你就全喂给 AI?”我:“信息越多越准。”她亮出错答案:“那它怎么被废话带跑了?”
后端·面试·求职
刘沅14 小时前
LeetCode 93.复原IP地址
算法·面试
用户409666013175114 小时前
实时数据大屏的 4 种推送方案:短轮询 → 长轮询 → SSE → WebSocket
后端·面试
不简说15 小时前
JS 代码技巧 vol.2 — 20 个数组/对象/字符串/正则的实用技巧
前端·javascript·面试