2017-08-30 56 views
0

我需要以下grep命令找到多少个请求每小时日志接收:如何针对一系列输入运行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

你可以重写的问题,并提供一些样本数据?我无法弄清楚你想做什么。 – tink

+0

谢谢,我用例子日志行更新了这个问题 – amitmah

+0

所以你的第一个grep永远不会匹配? – tink

回答

1
grep "yourstring" filelog.txt | 
    grep -Eo "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}" | sort | uniq -c 
+0

谢谢@沃尔特,你很棒:) – amitmah

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 
+0

这对我来说很好,除非结果没有按小时排序:) – amitmah

+0

简单修复:) ...让我修改答案 – tink