我有一堆日志文件.我需要找出所有文件中出现字符串的次数.
grep -c string *
回报
... file1:1 file2:0 file3:0 ...
使用管道我只能获得具有一个或多个出现次数的文件:
grep -c string * | grep -v :0 ... file4:5 file5:1 file6:2 ...
我怎样才能得到合并计数?(如果它返回file4:5, file5:1, file6:2
,我想回来8.)
这适用于每行多次出现:
grep -o string * | wc -l
cat * | grep -c string
grep -oh string * | wc -w
将计算一行中的多个事件
而不是使用-c,只需将其传递给wc -l.
grep string * | wc -l
这将在一行中列出每个匹配项,然后计算行数.
但是,这将错过字符串在一行上出现2次以上的情况.
cat * | grep -c string
一个罕见的有用的应用程序cat
.
与以前的所有答案不同的是:
perl -lne '$count++ for m//g;END{print $count}' *
您可以-R
递归地添加搜索(并避免使用cat)并-I
忽略二进制文件.
grep -RIc string .
必须的AWK解决方案:
grep -c string * | awk 'BEGIN{FS=":"}{x+=$2}END{print x}'
如果您的文件名包含":",请注意.
AWK解决方案还处理文件名,包括冒号:
grep -c string * | sed -r 's/^.*://' | awk 'BEGIN{}{x+=$1}END{print x}'
请记住,这种方法仍不能发现多次出现string
在同一行.