在过去一小时内从文本文件中获取Grep

时间:2014-02-04 20:55:04

标签: grep ping cat

我有几个类似的命令:

ping -i 60 8.8.8.8 | while read pong; do echo "$(date): $pong" >> /security/latencytracking/pingcapturetest2.txt;已完成

输出:

  

Tue Feb 4 15:13:39 EST 2014:64字节来自8.8.8.8:icmp_seq = 0 ttl = 50   时间= 88.844毫秒

然后我使用以下方法搜索结果:

cat /security/latencytracking/pingcapturetest* | egrep 'time=........ ms|time=......... ms'

我正在寻找超过X毫秒的延迟异常。

有没有办法比我正在进行更好的搜索并搜索过去的1,2,3等小时,而不是从文件的开头搜索?随着时间的推移,这可能变得乏味。

3 个答案:

答案 0 :(得分:1)

您可以将unix timestamp添加到日志中,然后根据以下内容进行搜索:

ping -i 60 8.8.8.8 | while read pong; do 
   echo "$(date +"%s"): $pong" >> log.txt
done

您的日志将包含以下条目:

1391548048: 64 bytes from 8.8.8.8: icmp_req=1 ttl=47 time=20.0 ms

然后使用dateawk的组合进行搜索:

使用GNU Date(Linux等):

awk -F: "\$1 > $(date -d '1 hour ago' +'%s')" log.txt

BSD Date(Mac OSX,BSD)

awk -F: "\$1 > $(date -j -v '-1H' +%s)" log.txt

该命令使用date -d将英语时间句子(或date -v转换为BSD / OSX上的相同任务)转换为unix时间戳。 awk然后将记录的时间戳(:之前的第一个字段)与生成的时间戳进行比较,并打印所有具有更高值的日志行,即更新。

答案 1 :(得分:0)

如果你熟悉R: 1.我用read.table()啜饮整个事情,删除不必要的列 2.然后做你喜欢的任何计算 除非你有数千万条记录,否则R可能会有点慢。

B计划: 1.使用cut来核实你不需要的东西,然后转到上面的计划。

答案 2 :(得分:0)

你也可以用bash来做。您可以按如下方式比较日期:

裁剪日期字段。您可以将该日期转换为自1970年1月1日午夜以来的秒数

date -d "Tue Feb 4 15:13:39 EST 2014" '+%s'

你将这个数字与一小时前得到的秒数进行比较,

reference=$(date --date='-1 hour' '+%s')

这样您就可以获得上一小时的所有记录。然后你可以在延迟时间后过滤