Awk 具有最小匹配数的grep

Awk 具有最小匹配数的grep,awk,command-line,grep,Awk,Command Line,Grep,如何执行grep-rli word dir但仅列出dir中至少包含x次word的文件 显示包含word 3或更多时间的所有文件,例如 或者4次或4次以上如果您知道出现在单独的行上,您可以使用grep-c(它统计匹配行) 输出看起来像:: 假设我们已经在包含我们感兴趣的文件的目录中。要获取出现次数超过一定数量的文件名,我们可以使用awk: $ grep -c func * | awk -F: -v n=3 '$2 >= n { print $1 }' file2 其中3是所需的最小出现次数

如何执行
grep-rli word dir
但仅列出dir中至少包含x次word的文件

显示包含word 3或更多时间的所有文件,例如


或者4次或4次以上

如果您知道出现在单独的行上,您可以使用
grep-c
(它统计匹配行)

输出看起来像

假设我们已经在包含我们感兴趣的文件的目录中。要获取出现次数超过一定数量的文件名,我们可以使用awk:

$ grep -c func * | awk -F: -v n=3 '$2 >= n { print $1 }'
file2
其中
3
是所需的最小出现次数


限制:

  • 将同一行上的多个单词作为单个匹配项进行计数
  • 期望文件名中没有换行符
    grep-Z
    将启用零字节分隔,awk可以使用它来代替
  • 如果
    *
    glob扩展到包含目录的列表,grep将为每个目录打印一条错误消息

考虑到您的输入文件在一行中可能有超过1次的搜索词,并且您希望按每行计算它,包括多次出现。我将使用
在这里查找
+
awk
解决方案

让我们先创建
awk
代码文件:

cat count.awk
{
  sum+=gsub(var,"&")
}
END{
  if(sum>=count){
    print FILENAME
  }
}
然后可以运行以下命令:其中
var
是需要搜索的变量,
count
是一个变量,该变量至少有该单词进入该文件的次数

find -type f -exec awk -v var="bla" -v count="3" -f count.awk {} \;


以上测试:

  • 为了进行测试,我们创建3个文件,如下所示
  • 现在,当我们运行以下命令时:

注意:如果在整个输入文件中出现单词,请在上面的
awk
解决方案中将
gsub
更改为
sub
,每行仅捕获一个单词。

请您的问题为您的目的定义
word
,并向我们简要说明,可测试的样本输入和预期输出,因此我们可以帮助您提出正确的解决方案。确保在示例中包含regexp元字符和可能的部分匹配。单词匹配在一行或整个文件中是3次?这是两个完全不同的东西…如何使它不区分大小写?前置
IGNORECASE=1到计数的开始。awk
打印每个输入文件的contents@theonlygusti,尝试像查找-type f-exec awk-v var=“bla”-v IGNORECASE=“1”-v count=“3”-f count.awk{}我测试了它,它工作得非常好,如果有任何疑问,请务必告诉我,干杯。
find -type f -exec awk -v var="bla" -v count="3" -f count.awk {} \;
cat file1
bla bla bla
test test test

cat file2
bla bla bla
test test test

cat file4
bla
test test test
find -type f -exec awk -v var="bla" -v count="3" -f count.awk {} \;
./file2
./file1