首页 新闻 搜索 专区 学院

如何用shell进行日志处理

0
悬赏园豆:200 [已解决问题] 解决于 2016-07-06 15:42

 请各位大神帮帮忙~~~~

日志格式如下:

27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 1127
110.52.250.126 - - [30/May/2013:17:38:20 +0800] "GET /data/cache/style_1_widthauto.css?y7a HTTP/1.1" 200 1292
27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/hot_1.gif HTTP/1.1" 200 680


需求:

时间格式统一为20150426这种

将"GET /static或是GET /source/"开头的访问记录过滤掉

GET和POST字符串也省略掉

过滤掉结尾的指定字符串:“HTTP/1.1”

 

输出结果如下:

117.135.212.82  20130530192838  api.php?mod=js&bid=94
59.60.121.125  20130530192838  thread-11764-1-1.html
114.249.233.29  20130530192839  api/connect/like.php

fayy的主页 fayy | 初学一级 | 园豆:6
提问于:2016-06-30 14:25
< >
分享
最佳答案
-1

1 用 ‘SFTP Net Drive Free’ 可以将linux 影射成win的盘符。或者用ssh客户端插件。这样powershell就可以处理linux文档了。

2 切割。用【- -】可以切割单行日志,可以出ip。用【[]】可以切割出时间,用引号可以切割第三部分。

3 后续的处理。

powershell = bash+python ,比这两个强 。我打算把你的问题作为本周菜鸟题。  QQ群号=183173532  名称=powershell交流群   

收获园豆:200
PowerShell免费软件 | 菜鸟二级 |园豆:332 | 2016-06-30 21:27

 OMG  菜鸟题。。。看不懂  用awk也实现了  就是日期的处理还剩点问题

fayy | 园豆:6 (初学一级) | 2016-07-04 13:37

@fayy: 

你的日志多大?多少GB?

 

用powershell(.net)如何转换【非标准日期字符串】为日期?

'30/May/2013:17:38:20'

'2011-29-01 12:00 AM'

答:

办法1:重新切割组合字符串,使之称为标准日期格式的字符串。

$a = '30/May/2013:17:38:20' # 这里我们只要把第一个冒号变成空格即可

$b = $a -split ':'

$c = $b[0] + ' ' + $b[1] + ':' + $b[2] + ':' +$b[3]

$c

$d = [datetime]$c

$d

 

办法2:使用[System.DateTime]::TryParseExact方法。

$特殊日期_字符串 = '30/May/2013:17:38:20'

$特殊日期_格式 = 'dd/MMMM/yyyy:HH:mm:ss'

$返回的日期 = New-Object DateTime

[System.DateTime]::TryParseExact(

$特殊日期_字符串,

$特殊日期_格式,

[System.Globalization.CultureInfo]::InvariantCulture,

[System.Globalization.DateTimeStyles]::None,

[ref]$返回的日期)

$返回的日期

PowerShell免费软件 | 园豆:332 (菜鸟二级) | 2016-07-04 20:36

@PowerShell免费软件: split是个好办法  谢谢

fayy | 园豆:6 (初学一级) | 2016-07-06 15:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册