Я пишу скрипт свиньи для обработки журнала доступа из прокси-сервера sophos.Regex с двойными кавычками в PIG
Каждая строка, как:
2015: 01: 13-00: 00: 01 АР-BADC-FAST-01 httpproxy [27983]: ID = "0001" Тяжесть = "Информация о" SYS = "SecureWeb" sub = "http" name = "http access" action = "pass" method = "GET" srcip = "10.20.7.210" dstip = "10.24.2.7" user = "" ad_domain = "" statuscode = "302 "cached =" 0 "profile =" REF_DefaultHTTPProfile (профиль веб-фильтра по умолчанию) "filteraction =" REF_DefaultHTTPCFFAction (действие фильтра содержимого по умолчанию) "size =" 0 "request =" 0x9ac68d0 "url =" http://www.google.com "exceptions =" av, auth, content, url, ssl, certcheck, certdate, mime, cache, fileextension "error =" "authtime =" 0 "dnstime =" 1 "cattime =" 0 "avscantime =" 0 "fullreqtime = "239428" device = "0" auth = "0"
Так что мне удалось сделать это на Java с помощью MapReduce, используя следующее регулярное выражение: \"([^\"]*)\"
, чтобы получить значения между кавычками и затем обработать их. Теперь я хочу сделать то же самое с свиньей, но я не могу применить регулярное выражение к каждой из строк.
Я делаю:
input = load './http.log' as (line : chararray);
splt = foreach input generate FLATTEN(REGEX_EXTRACT_ALL(line,'(\\"([^\\"]*)\\")'));
dump splt;
И результат свалки:().
Есть что-то, что мне не хватает с помощью REGEX_EXTRACT_ALL или мне нужно избежать некоторых символов регулярного выражения по-другому?
Спасибо!
двойных кавычек нет ничего особенного в регулярных выражениях, нет необходимости приводить их; вы должны сделать это на Java только потому, что в строковых литералах вы должны их процитировать. Но поскольку кажется, что PIG этого не нужно, просто удалите обратную косую черту. – fge
@fge Мне нужно регулярное выражение таким образом: '\" ([^ \ "] *) \", чтобы получить все значения между кавычками, например: https://www.regex101.com/r/yF8xN8/1. Но если я не scape \, я получаю: 'Неожиданный символ '' '' при выполнении скрипта свиньи – Rumal