我需要以下grep命令来查找日志中每小时收到的请求数:
grep 'login log' filelog.txt | grep -c '2017-08-30 ":00 to :23"'
这里时间00到23,我需要作为参数传递。例如,对于日期30,我需要查看每小时的计数是多少。
是否可以使用单个命令?目前我必须手动执行每小时一个命令。例如,
$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
答案 0 :(得分:1)
grep "yourstring" filelog.txt |
grep -Eo "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}" | sort | uniq -c
答案 1 :(得分:1)
所以,按照你所说的而不是你所做的去做:
您的输入(为测试而增加):
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