请各位大神帮帮忙~~~~
日志格式如下:
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
1 用 ‘SFTP Net Drive Free’ 可以将linux 影射成win的盘符。或者用ssh客户端插件。这样powershell就可以处理linux文档了。
2 切割。用【- -】可以切割单行日志,可以出ip。用【[]】可以切割出时间,用引号可以切割第三部分。
3 后续的处理。
powershell = bash+python ,比这两个强 。我打算把你的问题作为本周菜鸟题。 QQ群号=183173532 名称=powershell交流群
OMG 菜鸟题。。。看不懂 用awk也实现了 就是日期的处理还剩点问题
@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免费软件: split是个好办法 谢谢