Shell 如何在unix中打印文件中某个单词的出现次数
这是我的shell脚本。 给定一个目录和一个单词,搜索该目录并打印该单词出现次数最多的文件的绝对路径,同时打印出现次数。 我写了以下脚本Shell 如何在unix中打印文件中某个单词的出现次数,shell,unix,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 $
#!/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=包含单词的行数,但我需要打印给定目录中文件中单词的确切出现次数请尝试以下操作:
grep -Fwor "$word" "$dir" | sed "s/:${word}\$//" | sort | uniq -c | sort -n | tail -1
grep -o -w 'foo' bar.txt | wc -w
或
使用grep的
-c
计数功能:
grep -c "SEARCH" /path/to/files* | sort -r -t : -k 2 | head -n 1
grep命令将以
/path/name:count
格式输出每个文件,排序将按第二个(-k2
)字段(由冒号(-t:
)以相反顺序(-r
)进行数字(-n
)排序。然后我们使用head保存第一个结果(-n1
)。运行两次find命令是错误的x=`echo“$(find…)`
可以是x=$(find…)
。像这样抓取find的输出对于带有空格或其他特殊字符的文件是不安全的。如果我删除它,它就不工作了。怎么会这样?包装echo
和额外的子shell没有任何作用。sed在做什么,我不知道{word}表示什么grep-o-r
输出文件名、冒号和您要查找的单词。sedsed
删除了冒号和单词——我并不是假设每个文件名都没有冒号。它只打印给定文件中单词出现的次数。但是我需要打印文件名和计数。它会在当前目录中递归搜索包含给定单词的文件吗?因为我没有为文件指定任何路径。很抱歉,我不能运行命令并检查,因为我在家,所以想澄清我的疑问grep-c
仅统计包含图案的行,而不是每行出现一次以上的所有图案。
grep -c "SEARCH" /path/to/files* | sort -r -t : -k 2 | head -n 1