use*_*191 7 unix bash shell terminal grep
如何grep
使用时间戳进行计数?
示例:如果我有一个文件,我xyz
每次都会搜索一个值.该文件定期更新.
20121912-07:15:55 abc cbfr xyz
20121912-07:16:40 mni cbfr xyz
-----------
-----------
-----------
20121912-08:15:55 gty cbfr xyz
20121912-08:20:55 jui uio xyz
Run Code Online (Sandbox Code Playgroud)
我想找出的出现次数xyz
后,20121912-08:15:55
在这种情况下应该是2
.
执行grep -c "xyz" filename
读取整个文件并给出结果.我想在上次更新或使用时间戳后执行此操作.
这是一种黑客攻击,但只是grep
为了您想要的最早日期,并使用-A
然后通过管道打印之后的所有行grep -c xyz
:
$ fgrep -A 100 '20121912-08:15:55' file | fgrep -c 'xyz'
2
Run Code Online (Sandbox Code Playgroud)
注意:fgrep
只是固定字符串,grep
因为您没有使用regex
模式,这与执行grep -F
.
由于不太黑客的方法是使用sed
打印日期中的所有行,这样您就不需要确保值覆盖-A
文件的长度:
$ sed -n '/20121912-08:15:55/,$p' file | fgrep -c 'xyz'
2
Run Code Online (Sandbox Code Playgroud)
当然,这假设您的文件是按时间戳排序的,如果不是的话:
$ sort file | sed -n '/20121912-08:15:55/,$p' | fgrep -c 'xyz'
2
Run Code Online (Sandbox Code Playgroud)