【发布时间】:2014-02-06 12:53:01
【问题描述】:
我正在尝试计算文件中某个单词的出现次数。
如果一个单词在一行中出现多次,我将计数为 1。
以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败
grep -c "word" filename.txt
有没有一个班轮?
【问题讨论】:
-
“我将数为 1”。意思是“我将其视为 1”或“我将每个都视为 1”?
我正在尝试计算文件中某个单词的出现次数。
如果一个单词在一行中出现多次,我将计数为 1。
以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败
grep -c "word" filename.txt
有没有一个班轮?
【问题讨论】:
您可以使用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
【讨论】:
将 awk 中的 RS 设置为较短的。
awk 'END{print NR-1}' RS="word" file
【讨论】:
GNU awk 允许使用多个管道命令在单个命令中完成:
awk -v w="word" '$1==w{n++} END{print n}' RS=' |\n' file
【讨论】:
cat file | cut -d ' ' | grep -c word
这假定文件中的所有单词在单词之间都有空格。如果有标点符号将单词连接到自身,或者单词和自身之间的单行没有空格,则它们将计为一个。
【讨论】:
tr " " "\n"< file |grep -c "word"怎么样
grep -o '[^ \t\n,.]\+'会让你指定单词分隔符,然后使用wc -l
grep word filename.txt | wc -l
grep 打印匹配的行,然后wc -l 打印匹配的行数
【讨论】: