已经有一个与我类似的问题,但我的问题略有不同。我想看看有多少个文件包含每个单词。当文件有一个单词时,它会增加计数器,然后继续处理下一个文件。我不想知道该单词在每个文件中出现了多少次,或者它出现在文件的名称中,只是一个计数器,显示在我的文件中找到了多少个文件。例如:我有一个包含 10 个文件的目录,每个文件都是一个食谱,我想查看有多少个文件包含“salt”一词。运行命令后,它会输出类似以下内容:9 盐。这意味着在 10 个文件中有 9 个找到了它。不过我希望每个词都这样。到目前为止我有这个:
grep -l *| tr '[A-Z]' '[a-z]' | tr -d '[:punct:]' | tr ' ' '\n' | sort | uniq | wc -l
任何帮助深表感谢。
答案1
假设您的食谱文件夹位于/home/用户名/食谱
这是一个简单的脚本:
#!/bin/bash
count=0
dir=/home/username/recipes/
for recipe in $(ls $dir); do
if [ $(cat $HOME/recipes/$recipe | grep $1) ]; then
((count++))
fi
done
echo "$count $1"
保存文件后,必须使其可执行。执行此操作:
chmod 740 script.sh
运行它时,请包含您要查找的参数,如下所示:
./script.sh salt
如果在两个文件中匹配,则会输出:
2 salt
如果在三个文件中匹配,则会输出:
3 salt
ETC。
答案2
使用grep -c
例如
kaustubh@hacked:~/test$ cat a
salt
salt
salt
salt
salt
kaustubh@hacked:~/test$ cat b
here sis salt
their is salt
and everywhere is salt
kaustubh@hacked:~/test$ cat c
salt hash
hash salt
sweet salt
kaustubh@hacked:~/test$ cat d
this is line salt
salt
现在我想要文件中的单词数:grep -c salt *
kaustubh@hacked:~/test$ grep -c salt *
a:5
b:3
c:3
d:1