2016-05-23 7 views
1

Я пытаюсь анализировать лог-файл из 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 = "/") 

Увы, я не знаю, как использовать это для создания переменной, которую я хочу.

+0

шлюз правильно? :) – Sotos

+0

Является ли 'SOMETHING' доменом? – Sotos

+0

- это то, что происходит сразу после домена. Например, example.com/SOMETHING1, example.com/SOMETHING2 – Ignacio

ответ

1

Вы можете легко сделать это с регулярным выражением и gsub, но я бы рекомендовал, чтобы очистить ваши адреса от получения, должность, 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" 
+0

Спасибо @Sotos. Это почти то, что мне нужно, но не преувеличение. Переменная «path» - это «something1/__ assets __/shiny-server.js». Я хочу иметь переменную, которая является просто 'something1', без всех других вещей – Ignacio

+0

не используйте ваш пример здесь. Попробуйте и сделайте это по действующим URL-адресам – Sotos

+0

Я бы хотел, чтобы это работало с моим примером, потому что это то, что я получаю от своего «блестящего сервера» ... :( – Ignacio