我正在尝试计算文件中单词的出现次数。
如果一行中出现多次单词,我会计算为1。
以下命令将为我提供输出,但如果行有多次出现
,则会失败grep -c "word" filename.txt
有没有一个班轮?
答案 0 :(得分:15)
您可以使用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
答案 1 :(得分:2)
将awk中的RS设置为较短的。
awk 'END{print NR-1}' RS="word" file
答案 2 :(得分:0)
cat file | cut -d ' ' | grep -c word
这假定文件中的所有单词之间都有空格。如果标点符号连接到自身,或者在单词和它自身之间的单行上没有空格,则它们将被视为一个。
答案 3 :(得分:0)
GNU awk允许使用多个管道命令在单个命令中完成:
awk -v w="word" '$1==w{n++} END{print n}' RS=' |\n' file
答案 4 :(得分:-1)
grep word filename.txt | wc -l
grep
打印匹配的行,然后wc -l
打印匹配的行数