命令查看某个单词是否在文件列表中并输出它在多少个文件中

命令查看某个单词是否在文件列表中并输出它在多少个文件中

已经有一个与我类似的问题,但我的问题略有不同。我想看看有多少个文件包含每个单词。当文件有一个单词时,它会增加计数器,然后继续处理下一个文件。我不想知道该单词在每个文件中出现了多少次,或者它出现在文件的名称中,只是一个计数器,显示在我的文件中找到了多少个文件。例如:我有一个包含 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

相关内容