如何运行一系列input的grep命令?

我需要以下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