新足迹

 找回密码
 注册

精华好帖回顾

· 介绍一本书:《女士品茶》 (2012-7-27) 周周 · 更新完毕。大阪奈良匆匆一游 - 奈良 (2015-1-6) 没有袖子的汗衫
· 包子制作全程图解 (2010-6-9) 忙碌 · 美丽的南非开普敦 (2008-7-20) 周伟欣
Advertisement
Advertisement
查看: 1296|回复: 9

Please help on GREP command of LINUX [复制链接]

头像被屏蔽

禁止发言

发表于 2013-6-25 18:22 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Use 'grep -E "`date +"%Y-%m-%d"`.*Total sending status: Sent =" /app/emagine/gateway/log/smpp-tx-service.l*'
I can find the log of current day broken by hour, like:
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 00:14:56,998 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1148498 Success = 1081861 Throttling = 59805 Failur
e = 6832 Rate = 0.03/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 01:14:57,847 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149014 Success = 1082367 Throttling = 59815 Failur
e = 6832 Rate = 0.14/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 02:14:58,694 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149025 Success = 1082378 Throttling = 59815 Failur
e = 6832 Rate = 0.00/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 03:14:59,544 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149039 Success = 1082392 Throttling = 59815 Failur
e = 6832 Rate = 0.00/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 04:15:00,394 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149055 Success = 1082408 Throttling = 59815 Failur
e = 6832 Rate = 0.00/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 05:15:01,243 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149083 Success = 1082436 Throttling = 59815 Failur
e = 6832 Rate = 0.01/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 06:15:02,093 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149135 Success = 1082488 Throttling = 59815 Failur
e = 6832 Rate = 0.01/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 07:15:02,942 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1149265 Success = 1082618 Throttling = 59815 Failur
e = 6832 Rate = 0.04/s
/app/emagine/gateway/log/smpp-tx-service.log:2013-06-25 08:15:03,791 INFO   Thr:
                          Timer  ceiver.sms.transmitter.TimerWorkerThread:52
Total sending status: Sent = 1493179 Success = 1375684 Throttling = 105690 Failu
re = 11581 Rate = 81.39/s




But I want to display the hourly log of LAST 24 HOURS, rather than the current day as above.

How can I modify the GREP to get that? Or the whole shell script need to be modified?

Many many Thanks.
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2013-6-25 18:33 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
求助,非常感激 。

发表于 2013-6-25 20:31 |显示全部楼层
此文章由 xiaomao8754 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xiaomao8754 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 xiaomao8754 于 2013-6-25 19:42 编辑

Use GNU awk

awk 'BEGIN { t = systime() } { s = $1 " " $2; gsub(/[-:]/, " ", s) } t - mktime(s) < 86400' log_file

Note: variable s needs to be adjusted depending on your log file data format

发表于 2013-6-25 21:24 |显示全部楼层
此文章由 mlg_tech 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mlg_tech 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 mlg_tech 于 2013-6-25 20:26 编辑

Can't you just remove the date and just grep the last 24 lines? I assume each line equal to 1 hour.

发表于 2013-6-25 21:36 |显示全部楼层
此文章由 mlg_tech 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mlg_tech 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 mlg_tech 于 2013-6-25 20:38 编辑

E.g.
grep -E ".*Total sending status: Sent =" /app/emagine/gateway/log/smpp-tx-service.l* | tail -n 24
头像被屏蔽

禁止发言

发表于 2013-6-25 21:50 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
xiaomao8754 发表于 2013-6-25 20:31
Use GNU awk

awk 'BEGIN { t = systime() } { s = $1 " " $2; gsub(/[-:]/, " ", s) } t - mktime(s) < 86 ...

谢谢,不过不知道S 是 放什么变量的 ?
LOG FILE 里的 DATA  FORMAT ? 不理解。
那请问哪里是 GREP KEY  WORD 的 呢 ? I.E Total sending status: Sent =...

非常感谢
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2013-6-25 21:50 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
mlg_tech 发表于 2013-6-25 21:36
E.g.
grep -E ".*Total sending status: Sent =" /app/emagine/gateway/log/smpp-tx-service.l* | tail -n ...

不行 ,有很多 LOG FILE..谢谢

发表于 2013-6-25 22:12 |显示全部楼层
此文章由 mlg_tech 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mlg_tech 所有!转贴必须注明作者、出处和本声明,并保持内容完整
It's really depends your log file size, quantity and how often you run the script. If you are running the script every hour against a lot of 1MB logs, then it should be able do it's job well, with that being said. You can definitely alter the script to increase the performance.
Service the local community
http://ithandyman.com.au

发表于 2013-6-25 22:46 来自手机 |显示全部楼层
此文章由 xiaomao8754 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xiaomao8754 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 xiaomao8754 于 2013-6-25 22:16 编辑
hfwang 发表于 2013-6-25 20:50
谢谢,不过不知道S 是 放什么变量的 ?
LOG FILE 里的 DATA  FORMAT ? 不理解。
那请问哪里是 GREP KEY   ...


s是log里面存date那行
假如其中一行log data format如下
2013-02-05 10:05:30 bla bla
那么s就是 2013-02-05 10:05:30.还不懂去查awk文档或者google

grep KEYWORD I awk

combine你的grep command和awk就可以了,awk做的就是list last 24 hours log
头像被屏蔽

禁止访问

发表于 2013-6-27 16:48 |显示全部楼层
此文章由 lingg 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lingg 所有!转贴必须注明作者、出处和本声明,并保持内容完整
hfwang 发表于 2013-6-25 20:50
谢谢,不过不知道S 是 放什么变量的 ?
LOG FILE 里的 DATA  FORMAT ? 不理解。
那请问哪里是 GREP KEY   ...
  1. awk 'BEGIN { t = systime() } { s = $1 " " $2; gsub(/[-:]/, " ", s) } t - mktime(s) < 86400'
复制代码
我对AWK不是很熟,大概帮你读一下,systime,gsub 和 mktime 都是gawk支持的function,
awk和grep一样,也是逐行处理的。

赋值变量
  1. { t = systime() }
复制代码
由于你的log里,时间在 第一列和第二列,定义变量s 为第一列+第二列,中间用空格连接,

然后做字符替换(gsub),确保字符串 格式 正确
  1. { s = $1 " " $2; gsub(/[-:]/, " ", s) }
复制代码
这个看成一个IF,如果TRUE就显示此行
  1. t - mktime(s) < 86400'
复制代码

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部