问题描述
我目前正在尝试将AWS CloudFront访问日志文件加载到R中,但是在文件开头的指令(特别是在标题列表之前的“ #Fields:”声明)遇到一些麻烦。
我正在使用的文件完全遵循AWS Access Log documentation中描述的格式(遵循W3C "Extended Log File Format")。
这是此类日志文件的一个(简化的)示例:
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method [... more field names ...]
2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET [... more data points ...]
2019-12-13 22:36:27 SEA19-C1 900 192.0.2.200 GET [...]
我发现webreadr::read_aws
有望帮助我阅读AWS CloudFront访问日志(它们甚至指向我上面链接的完全相同的文档)。但是,出现以下错误:
library(webreadr)
my_log <- read_aws(my_logfile)
Error in aws_header_select(header_fields) :
Your file contains unrecognised fields
查看webreadr
的{{1}}对其不知道的字段并不可靠-我的AWS日志包含14个字段名称,自从最近更新时间。 (CRAN package source有点领先,但仍然不知道我的日志中有10个字段。)
我的问题:
是否有更好的R库来处理这些W3C扩展日志文件?
使用readr::read_delim
之类的标准阅读器,我知道我可以跳过包含“ #Version:”指令的第一行。但是,在第二行中,“#Fields:”将作为第一列标题读入,并实际上将所有其他标题向右偏移一列。
我想避免这样的解决方案,我必须像这样分别读取标题:
library(dplyr)
library(readr)
headers <- read_lines(my_logfile,skip = 1,n_max = 1) %>%
strsplit('\\s+') %>%
unlist() %>%
tail(-1)
my_log <- read_delim(
my_logfile,delim = "\t",trim_ws = T,escape_backslash = FALSE,col_names = headers,skip = 2
)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)