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

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

例如,有一个目录有100个文件,其中的所有文件可能都有“aaa”这个词。 如何计算该目录下所有文件中的“aaa”数?

我尝试了这样的:

zegrep "xception" `find . -name '*auth*application*' | wc -l 

但它不工作。

grep -roh aaa . | wc -w

greprecursion地search当前目录中的所有文件和目录,并输出匹配结果,而不是整行。 然后,只需使用wc来统计有多less单词。

另一个基于findgrep解决scheme。

 find . -type f -exec grep -o aaa {} \; | wc -l 

应该正确处理文件名与他们的空格。

让我们使用AWK!

 $ function wordfrequency() { awk 'BEGIN { FS="[^a-zA-Z]+" } { for (i=1; i<=NF; i++) { word = tolower($i); words[word]++ } } END { for (w in words) printf("%3d %s\n", words[w], w) } ' | sort -rn; } $ cat your_file.txt | wordfrequency 

这列出了提供的文件中出现的每个单词的频率。 如果你想看到你的单词出现,你可以这样做:

 $ cat your_file.txt | wordfrequency | grep yourword 

要查找目录中所有文件的发生(非recursion),可以这样做:

 $ cat * | wordfrequency | grep yourword 

要查找目录中的所有文件(以及它的子目录)中的单词出现情况,可以这样做:

 $ find . -type f | xargs cat | wordfrequency | grep yourword 

来源: AWK-鲁德

 find .|xargs perl -p -e 's/ /\n'|xargs grep aaa|wc -l 

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


  1. 要计算特定文件中的单词数量:

     grep -c <word> <file_name> 

    例:

     grep -c 'aaa' abc_report.csv 

    输出:

     445 

  1. 要查看整个目录中的单词数量:

     grep -c -R <word> 

    例:

     grep -c -R 'aaa' 

    输出:

     abc_report.csv:445 lmn_report.csv:129 pqr_report.csv:445 my_folder/xyz_report.csv:408 

cat文件一起grep输出: cat $(find /usr/share/doc/ -name '*.txt') | zegrep -ic '\<exception\>' cat $(find /usr/share/doc/ -name '*.txt') | zegrep -ic '\<exception\>'

如果你想“特殊”匹配,不要使用单词“\”和“\>”。

从如何开始:

 cat * | sed 's/ /\n/g' | grep '^aaa$' | wc -l 

如下面的成绩单所示:

 pax$ cat file1 this is a file number 1 pax$ cat file2 And this file is file number 2, a slightly larger file pax$ cat file[12] | sed 's/ /\n/g' | grep 'file$' | wc -l 4 

sed将空格转换为换行符(可能还需要包含其他空格字符,如选项卡,使用sed 's/[ \t]/\n/g' )。 grep只是得到那些有所需词的行,然后wc为你计算这些行。

现在可能会出现这种脚本无法正常工作的情况,但绝大多数情况下都可以。

如果你想要一棵树 (不只是一个单一的目录级别),你可以使用如下的东西:

 ( find . -name '*.txt' -exec cat {} ';' ) | sed 's/ /\n/g' | grep '^aaa$' | wc -l 

还有一个grep正则expression式只用于匹配单词:

 # based on Carlos Campderrós solution posted in this thread man grep | less -p '\<' grep -roh '\<aaa\>' . | wc -l 

对于与正则expression式语法不同的单词,请参阅:

 man re_format | less -p '\[\[:<:\]\]'