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
是所需的最小出现次数
限制:
- 将同一行上的多个单词作为单个匹配项进行计数
- 期望文件名中没有换行符
将启用零字节分隔,awk可以使用它来代替grep-Z
:
- 如果
glob扩展到包含目录的列表,grep将为每个目录打印一条错误消息*
在这里查找+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