计算整个文件中单词出现次数的命令
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”已经是答案了)。以上是关于计算整个文件中单词出现次数的命令的主要内容,如果未能解决你的问题,请参考以下文章