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


31

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

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?

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

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

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

cut -f 1 Tweet_Data | grep -c "iPhone"

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


cut -f1根据标签页进行裁剪,此处的功能不多。您确定这wc -l确实为您提供了正确的计数吗?它在这里显示2,但我计算了3个“ iPhone”实例。
杰夫·谢勒


Answers:


54

鉴于这样的要求,我将使用GNU grep(用于-ooption),然后将其传递通过wc以计算出现的总数:

$ grep -o -i iphone Tweet_Data | wc -l
3

平原grep -c上的数据将计算匹配的数,而不是匹配的单词总数。使用该-o选项可以告诉grep在其在线上输出每个匹配项,而不管该匹配项有多少次。

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


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

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3

1

最简单的方法是

grep -wc "your_text" FileName

对你来说,

grep -wc "iPhone" Tweet_Data

非常干净的答案,但是,如果您匹配“ cool”之类的单词,则只会匹配cool而不会匹配ccooll,因此请注意单词周围的空格很重要。
jasonleonhard

1
当单词在一行中出现多次时,结果将不正确。
hek2mgl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.