我需要以下grep命令来查找日志中每小时接收的请求数量:
grep 'login log' filelog.txt | grep -c '2017-08-30 ":00 to :23"'
这里00到23点的时间,我需要作为parameter passing。 例如,对于date30,我需要看到每个小时的计数。
是否可以使用单个命令? 目前我必须手动执行每个小时的一个命令。 例如,
$grep 'login log' filelog.txt | grep -c '2017-08-30 :00' 123 $grep 'login log' filelog.txt | grep -c '2017-08-30 :01' 456
下面是我想根据时间每小时计算一次的文件内的日志行(第二列):
2017-08-30 20:19:47 INFO com.java.JavaFile:123 - login log abcduser
grep "yourstring" filelog.txt | grep -Eo "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}" | sort | uniq -c
所以,按照你所说的而不是你所做的来做:
您的输入(增加了测试):
cat filelog.txt 2017-08-30 20:19:47 INFO com.java.JavaFile:123 - user login abcduser 2017-08-30 20:29:47 INFO com.java.JavaFile:123 - user login abcduser 2017-08-30 21:17:47 INFO com.java.JavaFile:123 - user login abcduser 2017-08-30 21:19:47 INFO com.java.JavaFile:123 - user login abcduser
期望的结果? 打印小时和匹配次数:
awk '/login/ {a[gensub(/(..):.*/,"\\1",1,$2)]++;b[gensub(/(..):.*/,"\\1",1,$2)]=gensub(/(..):.*/,"\\1",1,$2)} END{n=asorti(a,s); for(i=1;i<=n;i++){print b[s[i]]"\t"a[s[i]]}}' filelog.txt 20 2 21 2