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

统计一个文本中某个关键字出现的次数,可以采用多种方法,这里分别给出在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 文件中包含关键词"关键字"的行数,无论一行中有多少次出现该关键字,都会被当作一次计算。

相关推荐
Warren9815 分钟前
Pytest Fixture 作用域与接口测试 Token 污染问题实战解析
功能测试·面试·单元测试·集成测试·pytest·postman·模块测试
June bug42 分钟前
软件测试面试常见问答题2
面试·职场和发展
2501_901147831 小时前
PyTorch DDP官方文档学习笔记(核心干货版)
pytorch·笔记·学习·算法·面试
Serene_Dream1 小时前
Java 垃圾收集器
java·jvm·面试·gc
芝士爱知识a12 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
石去皿13 小时前
大模型面试通关指南:28道高频考题深度解析与实战要点
人工智能·python·面试·职场和发展
C雨后彩虹14 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
美团程序员14 小时前
80道经典常见测试面试题
软件测试·面试·职场和发展·软件测试面试
测试秃头怪14 小时前
面试大厂就靠这份软件测试八股文了【含答案】
自动化测试·软件测试·python·功能测试·面试·职场和发展·单元测试
测试杂货铺14 小时前
软件测试面试题大全,你要的都在这。。
自动化测试·软件测试·python·功能测试·面试·职场和发展·测试用例