【发布时间】:2018-02-18 23:54:46
【问题描述】:
我有一个 Apache Web Server 数据的数据文件,我想解析该文件并创建一个由日志的不同部分组成的数据框。这将需要我做一些字符串操作和正则表达式的使用。但是,我在字符串操作方面的经验非常有限。
每一行数据是一个日志,像这样:
[1] "79.133.215.123 - - [14/Jun/2014:10:30:13 -0400] \"GET /home HTTP/1.1\" 200 1671 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\""
对于 IP 地址,我使用 regexpr 函数来识别第一个空格,然后根据该第一个空格获取一个子字符串,如下所示:
> first_space <- regexpr(pattern = " ", text=web_logs)
> IP <- substr(x=web_logs, start=1, stop=first_space-1)
但是,对于我想提取的其他变量,我对我能做什么感到困惑。例如,如果我想提取方括号括起来的日期,我尝试使用 regexpr where pattern = "[",但收到错误。
我可以利用哪些其他功能来提取我需要的信息?
【问题讨论】:
-
您究竟需要提取什么样的信息?显示您的预期结果将有助于 SO 用户帮助您。
-
例如,假设我想检索一个向量,其中每个成员都是日期。我尝试使用子字符串来执行此操作,但每个日志的长度不同。所以这段代码:'code' Date
-
迈克尔,我明白这一点。你只想提取日期吗?还是您也想提取其他信息?
-
我还希望提取请求(例如 GET)、页面(例如主页)和 HTTP 版本(例如 1.1)。很抱歉我的评论代码显示不正确,我是新手。
-
我的想法是使用 strsplit,但我不知道如何提取 strsplit 中的特定位,如果这有意义的话。