处理目标字符串从日志文件中提取相关数据?

时间:2016-05-23 13:43:35

标签: r stringr

我正在尝试分析来自nginx的日志文件。特别是,我想在第一个/之后添加到我的数据框中,例如:

df1 <- structure(data.frame(V5 = c("GET /SOMETHING1/__assets__/shiny-server.js HTTP/1.1", 
                             "GET /SOMETHING2/shared/jquery.min.js HTTP/1.1", "GET /SOMETHING3/AdminLTE-2.0.6/AdminLTE.min.css HTTP/1.1", 
                             "POST /SOMETHING1/__sockjs__/n=B8x2Q3IWu2PhwngjN6/831/q6rt9t8u/xhr HTTP/1.1", 
                             "GET /SOMETHING3/shared/bootstrap/css/bootstrap.min.css HTTP/1.1")), class = "data.frame", row.names = c(NA, 
                                                                                                                                 -5L), .Names = "V5")

我想将Something添加到该数据框,它将采用值SOMETHING1, SOMETHING2, SOMETHING1, SOMETHING3。现在我正在玩stringr,我可以获得一个列表,其中包含我想要的信息作为列表中每个元素的第二个元素:

stringr::str_split(df1$V5,pattern = "/") 

唉,我不知道如何用它来创建我想要的变量。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式和gsub轻松完成此操作,但我建议您从get,post,http / 1.1等清除您的网址,然后使用urltools提取域名,路径,端口,...

clean_gateway <- function(x){
 z <- gsub("\\:[0-9]*$", "", gsub(" HTTP/1.1*$", "", x))
 y <- gsub("\\.*$", "", z)
 w <- gsub("^.*? ", "", y)
 w
 }

library(urltools)
df1$v5 <- clean_gateway(df1$V5)
url_parse(df1$v5)

基于上述方法,

gsub('/.*', '', url_parse(df1$V5)$path)
#[1] "SOMETHING1" "SOMETHING2" "SOMETHING3" "SOMETHING1" "SOMETHING3"