我有一堆日志文件。我需要找出一个字符串在所有文件中出现了多少次。

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 -oh string * | wc -w

将计数在一行中多次出现

其他回答

grep -oh string * | wc -w

将计数在一行中多次出现

强制AWK解决方案:

grep -c string * | awk 'BEGIN{FS=":"}{x+=$2}END{print x}'

但是要注意你的文件名是否包含“:”。

而不是使用-c,只是将其管道到wc -l。

grep string * | wc -l

这将列出单行上的每个事件,然后计算行数。

但是,这将错过字符串在一行上出现2+次的实例。

AWK解决方案还处理包含冒号的文件名:

grep -c string * | sed -r 's/^.*://' | awk 'BEGIN{}{x+=$1}END{print x}'

请记住,此方法仍然不会在同一行上发现多次出现的字符串。

cat * | grep -c string