如何使用时间戳进行grep计数

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读取整个文件并给出结果.我想在上次更新或使用时间戳后执行此操作.

Chr*_*our 1

这是一种黑客攻击,但只是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)