2016-09-01 32 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