如何在unix中打印文件中出现的单词数

时间:2015-01-07 14:25:49

标签: shell unix

这是我的shell脚本。 给定一个目录和一个单词,搜索目录并打印具有该单词最大出现次数的文件的绝对路径,并打印出现次数。 我写了以下脚本

#!/bin/bash

 if [[ -n $(find / -type d -name $1 2> /dev/null) ]]
 then
  echo "Directory exists"

   x=` echo " $(find / -type d -name $1 2> /dev/null)"`
   echo "$x"
   cd $x
   y=$(find . -type f | xargs grep -c  $2  | grep -v ":0"| grep -o '[^/]*$' | sort -t: -k2,1 -n -r ) 
   echo "$y"
   else 
   echo "Directory does does not exists"
 fi   


 result: scriptname directoryname word
 output: /somedirectory/vtb/wordsearch : 4
         /foo/bar: 3

有没有选择替换xargs grep -c $ 2?因为grep -c打印count =包含该单词的行数,但是我需要在给定目录中的文件中打印单词的确切出现次数

3 个答案:

答案 0 :(得分:0)

grep -Fwor "$word" "$dir" | sed "s/:${word}\$//" | sort | uniq -c | sort -n | tail -1

答案 1 :(得分:0)

试试这个:

grep -o -w 'foo' bar.txt | wc -w

OR

grep -o -w 'word' /path/to/file/ | wc -w

答案 2 :(得分:0)

使用grep的-c计数功能:

grep -c "SEARCH" /path/to/files* | sort -r -t : -k 2 | head -n 1

grep命令将以/path/name:count格式输出每个文件,排序将以数字(-n)排序,由第二个(-k 2)字段排序,由冒号({{分隔) 1}})以相反的顺序(-t :)。然后我们使用head来保留第一个结果(-r)。