免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2329 | 回复: 9
打印 上一主题 下一主题

[文本处理] 如何取得最近15分钟的日志,格式如下,要求可以跨年、月、日! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-13 10:53 |只看该作者 |倒序浏览
本帖最后由 chhts 于 2012-10-13 10:54 编辑

日志的格式如下,需要获得最近15分钟的日志
跨年月日正常运行,正常获取,比如:2013年1月1日0点5分执行此脚本,可以找到(15分钟之内)即:2012年12月31日23点50分之后日志


Oct 13 10:14:46 2012 XXXXXXXXXXX
Oct 13 10:14:47 2012 XXXXXXXXXXX
Oct 13 10:14:48 2012 XXXXXXXXXXX
Oct 13 10:14:56 2012 XXXXXXXXXXX

论坛徽章:
0
2 [报告]
发表于 2012-10-13 11:47 |只看该作者
你指某个日志, 如/var/log/messages, 还是所有日志啊?

论坛徽章:
0
3 [报告]
发表于 2012-10-13 12:02 |只看该作者
是的,就是一个日志,文件很大

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2012-10-13 12:19 |只看该作者
本帖最后由 jason680 于 2012-10-13 12:21 编辑

回复 1# chhts


# cat log
Oct 31 10:14:46 2012 XXXXXXXXXXX
Oct 31 10:14:47 2012 XXXXXXXXXXX
Oct 31 23:51:48 2012 XXXXXXXXXXX
Oct 31 23:54:56 2012 XXXXXXXXXXX

# bash log-15min.sh
2012-12-31 23:50:00
Oct 31 23:51:48 2012 XXXXXXXXXXX
Oct 31 23:54:56 2012 XXXXXXXXXXX

# cat log-15min.sh
# just for setting
date -s "2013-1-1 0:5:0" > /dev/null


min15=`date -d "-15min" "+%F %T"`
echo $min15

awk -vt="$min15" '
BEGIN{
  M["Jan"]= 1; M["Feb"]= 2;
  # ... do it for 1 to 12 month by yourself
  M["Oct"]=12;
}
{
  date=$4"-"M[$1]"-"$2" "$3
  #print date
  if(t < date) print
}
' log

   

论坛徽章:
0
5 [报告]
发表于 2012-10-13 12:39 |只看该作者
还不简单. 设一个cron job, 每十五分钟运行一次. 原理如下. 首次运行时截取整个日志, 第二次运行时, 把截取所得的和当前日志比较(diff), 得出的就是15分钟以内的了, 然后再截取作为下次运行时使用.
我公司也是用这种方法的, 适合你用吗? 但请注意第一次输出, 应该有点问题.

论坛徽章:
0
6 [报告]
发表于 2012-10-13 17:16 |只看该作者
回复 5# samleung18

这个有问题,当原始日志被转储后,就不行了


   

论坛徽章:
0
7 [报告]
发表于 2012-10-14 10:50 |只看该作者
你之前没说要转储啊. 问问题前应该把所有条件描述清楚.

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
8 [报告]
发表于 2012-10-14 11:55 |只看该作者
这类问题终极解决办法把时间戳都换成Unix纪元的second,取相对值,awk有个函数就做这个事的,这个用awk就很容易搞掂。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
9 [报告]
发表于 2012-10-14 11:57 |只看该作者
计算之后再转成相对时间如2012.10.14....这种即可。
。。。。。。

论坛徽章:
0
10 [报告]
发表于 2012-10-14 22:15 |只看该作者
  1. #!perl -lw
  2. use strict;
  3. use POSIX qw(mktime);
  4. # AUTHOR: niejieqiang

  5. my %date =(
  6.         Jan=>1,
  7.         Feb=>2,
  8.         Mar=>3,
  9.         Apr=>4,
  10.         May=>5,
  11.         Jun=>6,
  12.         Jul=>7,
  13.         Aug=>8,
  14.         Sep=>9,
  15.         Oct=>10,
  16.         Nov=>11,
  17.         Dec=>12
  18. );
  19. my ($mon,$day,$hou,$min,$sec,$year);
  20. my ($time,$now ,$secs, $limit);
  21. while(<DATA>){
  22.         $time = substr($_,0,20);
  23.         $time=~s/^([A-z]+)/$date{$1}/;
  24.         ($mon,$day,$hou,$min,$sec,$year)=split /\s|\:/,$time;
  25.         $secs = POSIX::mktime($sec,$min,$hou,$day,$mon-1,$year-1900,0,0);

  26.         $now=time();
  27.         $limit = $now-15*60;
  28.         print  if $secs > $limit ;
  29. }
  30. __DATA__
  31. Oct 13 10:14:46 2012 XXXXXXXXXXX
  32. Oct 13 10:14:47 2012 XXXXXXXXXXX
  33. Oct 13 10:14:48 2012 XXXXXXXXXXX
  34. Oct 14 10:44:56 2012 XXXXXXXXXXX
  35. Oct 14 22:10:56 2012 XXXXXXXXXXX
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP