处理日志文件中的目标字符串以提取相关数据?
process destination string from log file to extract relevant data?
我正在尝试分析来自 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 = "/")
唉,我不确定如何使用它来创建我想要的变量。
您可以使用正则表达式和 gsub
轻松完成此操作,但我建议您从 get、post、http/1.1 等中清除您的 URL,然后使用 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"
我正在尝试分析来自 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 = "/")
唉,我不确定如何使用它来创建我想要的变量。
您可以使用正则表达式和 gsub
轻松完成此操作,但我建议您从 get、post、http/1.1 等中清除您的 URL,然后使用 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"