如何计算目录的所有文件中单词的出现次数?

Ash*_*rma 50 unix linux grep count find

我正在尝试计算整个目录中的特定单词出现次数.这可能吗?

比如说有一个包含100个文件的目录,所有文件的文件中都可能包含"aaa"字样.我如何计算该目录下所有文件中"aaa"的数量?

我尝试过类似的东西:

 zegrep "xception" `find . -name '*auth*application*' | wc -l 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Car*_*rós 92

grep -roh aaa . | wc -w

grep递归地在当前目录中搜索aaa的所有文件和目录,并仅输出匹配,而不是整行.然后,只需wc用来计算那里有多少个单词.

  • MM ......的确,我没有注意到它只计算匹配的行数而不是实际的匹配数.我仍然认为放置单词边界以避免嵌套匹配可能很有用.对不起,我把它们错误地放在了上一条评论中:`grep -rohP'\ baaa\b.| wc -w` (2认同)

Par*_*us- 8

grep以最简单的方式使用。尝试grep --help获取更多信息。


  1. 要获取特定文件中单词的计数:

    grep -c <word> <file_name>
    
    Run Code Online (Sandbox Code Playgroud)

    例子:

    grep -c 'aaa' abc_report.csv
    
    Run Code Online (Sandbox Code Playgroud)

    输出:

    445
    
    Run Code Online (Sandbox Code Playgroud)

  1. 要获取整个目录中单词的计数:

    grep -c -R <word>
    
    Run Code Online (Sandbox Code Playgroud)

    例子:

    grep -c -R 'aaa'
    
    Run Code Online (Sandbox Code Playgroud)

    输出:

    abc_report.csv:445
    lmn_report.csv:129
    pqr_report.csv:445
    my_folder/xyz_report.csv:408
    
    Run Code Online (Sandbox Code Playgroud)


Fre*_*ihl 7

基于find和的另一种解决方案grep.

find . -type f -exec grep -o aaa {} \; | wc -l
Run Code Online (Sandbox Code Playgroud)

应正确处理包含空格的文件名.