我想解析 R 中的 access.log。它具有以下形式,我想将其放入 data.frame:
TIME="2013-07-25T06:28:38+0200" MOBILE_AGENT="0" HTTP_REFERER="-" REQUEST_HOST="www.example.com" APP_ENV="envvar" APP_COUNTRY="US" APP_DEFAULT_LOCATION="New York" REMOTE_ADDR="11.222.33.444" SESSION_ID="rstg35tsdf56tdg3" REQUEST_URI="/get/me/something" HTTP_USER_AGENT="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" REQUEST_METHOD="GET" REWRITTEN_REQUEST_URI="/index.php?url=/get/me/something" STATUS="200" RESPONSE_TIME="155,860ms" PEAK_MEMORY="18965" CPU="99,99"
每个文件的日志为 400MB,目前我有大约 4GB 的日志,所以大小很重要。
另一件事.. 有两种不同的日志结构(包括不同的列),所以你不能假设总是有相同的列,但你可以假设一次只解析一种结构。
到目前为止,我所拥有的是这个结构的正则表达式:
(\\w+)[=][\"](.*?)[\"][ ]{0,1}
我可以使用 读取数据并以某种方式将其放入数据框中readlines
,但它很慢而且很混乱gsub
。read.table
有任何想法吗?天呐!