计算文本文件中单词的出现次数

Max*_*xxx 51 grep text-processing cut

我有一个包含推文的文本文件,我需要计算推文中提到某个词的次数。例如,该文件包含:

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?
Run Code Online (Sandbox Code Playgroud)

假设我想计算文件中提到 iPhone 的次数。所以这就是我尝试过的。

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
Run Code Online (Sandbox Code Playgroud)

它当然有效,但我对 unix 中的“wc”命令感到困惑。如果我尝试以下操作有什么区别:

cut -f 1 Tweet_Data | grep -c "iPhone"
Run Code Online (Sandbox Code Playgroud)

在哪里使用 -c 代替?这两者在一个充满推文的大文件中产生不同的结果,我对它的工作原理感到困惑。哪种方法是计算发生次数的正确方法?

Jef*_*ler 83

鉴于这样的要求,我将使用 GNU grep(对于-o选项),然后通过它wc来计算出现的总数:

$ grep -o -i iphone Tweet_Data | wc -l
3
Run Code Online (Sandbox Code Playgroud)

grep -c数据上的平原将计算匹配的数,而不是匹配的单词总数。使用该-o选项会告诉 grep 在自己的行上输出每个匹配项,无论在原始行中找到多少次匹配项。

wc -l告诉wc实用程序计算行数。在 grep 将每个匹配项放在自己的行中后,这是该单词在输入中出现的总次数。


如果 GNU grep 不可用(或不需要),您可以转换输入,tr以便每个单词都在自己的行上,然后使用grep -c计数:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
Run Code Online (Sandbox Code Playgroud)


小智 7

最简单的方法是,

grep -wc "your_text" FileName
Run Code Online (Sandbox Code Playgroud)

对你来说将会是,

grep -wc "iPhone" Tweet_Data
Run Code Online (Sandbox Code Playgroud)

  • 当该单词在一行中出现多次时,结果将不正确。 (16认同)
  • 非常干净的答案,但是如果您匹配“酷”这样的单词,您只会匹配“酷”而不是“ccooll”,因此请注意单词周围的空格很重要。 (2认同)