计算整个文件中单词出现次数的命令

Posted

技术标签:

【中文标题】计算整个文件中单词出现次数的命令【英文标题】:command to count occurrences of word in entire file 【发布时间】:2014-02-06 12:53:01 【问题描述】:

我正在尝试计算文件中某个单词的出现次数。

如果一个单词在一行中出现多次,我将计数为 1。

以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败

grep -c "word" filename.txt

有没有一个班轮?

【问题讨论】:

可能重复Calculate Word occurrences from file in bash “我将数为 1”。意思是“我将其视为 1”或“我将每个都视为 1”? 【参考方案1】:

您可以使用grep -o 显示完全匹配然后计算它们:

grep -o "word" filename.txt | wc -l

测试

$ cat a
hello hello how are you
hello i am fine
but
this is another hello

$ grep -c "hello" a    # Normal `grep -c` fails
3

$ grep -o "hello" a 
hello
hello
hello
hello
$ grep -o "hello" a | wc -l   # grep -o solves it!
4

【讨论】:

【参考方案2】:

将 awk 中的 RS 设置为较短的。

awk 'ENDprint NR-1' RS="word" file

【讨论】:

【参考方案3】:

GNU awk 允许使用多个管道命令在单个命令中完成:

awk -v w="word" '$1==wn++ ENDprint n' RS=' |\n' file

【讨论】:

【参考方案4】:
cat file | cut -d ' ' | grep -c word

这假定文件中的所有单词在单词之间都有空格。如果有标点符号将单词连接到自身,或者单词和自身之间的单行没有空格,则它们将计为一个。

【讨论】:

tr " " "\n"< file |grep -c "word"怎么样 我认为grep -o '[^ \t\n,.]\+'会让你指定单词分隔符,然后使用wc -l 对不起,错过了正则表达式中的 -P 选项。请参阅:***.com/questions/1825552/grep-a-tab-in-unix 了解更多信息【参考方案5】:
grep word filename.txt | wc -l

grep 打印匹配的行,然后wc -l 打印匹配的行数

【讨论】:

它不计算同一行中单词的重复出现次数。这会计算有多少行中有这个词 @GuntramBlohm 不,它没有。鉴于我的示例文件,它将返回 3 而不是 4。 "我将数为 1。"对我来说,这意味着他希望同一行中的多个单词只计数一次。 但是,请阅读“以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败。”我想他可能是想说“如果一个词在一行中出现多次,它会算作 1” 是的,他的意思是“到目前为止,如果在一行上多次出现,则将其视为一个”,因此他正在寻找更好的解决方案(一个计算单词出现次数的解决方案,而不是包含单词的行)(因此是问题。否则,他的“grep -c”已经是答案了)。

以上是关于计算整个文件中单词出现次数的命令的主要内容,如果未能解决你的问题,请参考以下文章

计算每个单词在文件中出现的次数

计算特定单词在 C++ 文本文件中出现的次数

在 linux bourne shell 中:如何计算文件中特定单词的出现次数

计算文件中与 String [ ] 中的单词匹配的单词

计算单个字母在单词中出现的次数

如何计算一个单词在句子中出现的次数?