2016-09-01 25 views
0

我正在尝试在我的日志文件中找到偶数。总结grep -c

命令:

grep -Eo "2016-08-30" applciationLog.log* -c 

输出:

applciationLog.log.1:0 
applciationLog.log.2:0 
applciationLog.log.3:0 
applciationLog.log.4:0 
applciationLog.log.5:7684 
applciationLog.log.6:9142 
applciationLog.log.7:8699 
applciationLog.log.8:0 

所有这些值7684 + 9142 + 8699 = 25525.任何建议我可以做什么,我其实需要的是总和?任何我可以附加到grep来启用它。

任何帮助或指针,欢迎和赞赏。

+0

的grep的工作就是找东西。增加数字不是它的工作。您将grep的输出提供给awk/sed并在那里进行添加。 –

回答

0

看看这对你的作品:

grep -Eo "2016-08-30" applciationLog.log* -c | awk -F':' 'BEGIN {sum = 0;} {sum += $2;} END {print sum;}' 

我们用awk每行分手后的:一个分隔符,总结号的每一行,并在最后打印出结果。

+1

好的答案! ;-)仅供参考,awk在每个命令末尾不需要分号*,如果同一语句中的多行在同一行上,它只需要分隔它们。所以你的awk脚本中的所有分号都可以被删除。 – ghoti

+0

@ghoti明白了,尽可能简单明了,让不熟悉awk的人更容易遵循 –

0

grep命令不执行算术运算,它只是查找与正则表达式匹配的行。

要计算您已有的输出,我会使用awk

grep -c -F "2016-08-30" applciationLog.log* | awk -F: '{n+=$2} END {print n}' 

请注意,您grep选项没有任何意义 - -E告诉使用扩展的正则表达式的命令,但你只是寻找一个固定的字符串(日期)。所以我换了-F选项。 -o告诉grep打印出匹配的文本,你用-c覆盖,所以我放弃了它。

0

如果你想让你的grep命令,管道输出到awk中,快速而肮脏的方式是到这里:

grep -Eo "aaa" -c aaa.txt bbb.txt -c | awk 'BEGIN {cnt=0;FS=":"}; {cnt+=$2;}; END {print cnt;}' 

或者使用的awk正则表达式直接:

awk 'BEGIN {cnt=0}; {if(/aaa/) {cnt+=1;}}; END {print cnt;}' aaa.txt bbb.txt