0

私はログファイルを持っています、

116.48.29.143 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 749 "-" "Mozilla/4.0 (互換; MSIE 6.0; Windows NT 5.1; SV1 ; .NET CLR 1.1.4322)"

145.89.87.211 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 613 "-" "Mozilla/4.0 (互換; MSIE 6.0; Windows NT 5.1; SV1 ; .NET CLR 1.1.4322)"

REGISTER file:/home/hadoop/lib/pig/piggybank.jar;
DEFINE EXTRACT org.apache.pig.piggybank.evaluation.string.EXTRACT();             
DEFINE CustomFormatToISOorg.apache.pig.piggybank.evaluation.datetime.convert.CustomFormatToISO();
DEFINE ISOToUnix org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix();
DEFINE DATE_TIME org.apache.pig.piggybank.evaluation.datetime.DATE_TIME();
DEFINE FORMAT_DT org.apache.pig.piggybank.evaluation.datetime.FORMAT_DT();
DEFINE FORMAT org.apache.pig.piggybank.evaluation.string.FORMAT();

A = LOAD 'input' USING TextLoader AS (line:chararray);

B = FOREACH A GENERATE FLATTEN (REGEX_EXTRACT_ALL(line,'^(\\S+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] "(.+?)" (\\S+) (\\S+) "([^"]*)" "([^"]*)"') ) AS (remoteAddr:chararray, remoteLogname: chararray, user: chararray,  time: chararray, request: chararray, status: int, bytes_string: chararray, referrer: chararray, browser: chararray);

私の問題は分を抽出することです。つまり、[01/Oct/2013:20:28:21 +0530] から 28:21 だけを取得する必要があります

どうすればそれを抽出できますか??

4

2 に答える 2

0

正規表現の書き方は既に知っているので、既存のものを変更するか、新しいものを作成してみませんか? ここに新しいものがあります:

C = FOREACH A GENERATE REGEX_EXTRACT(time, '[\\w/]+:\\d{2}([\\d:]+)\\s[+\\-]\\d{4}') AS hourMin;
于 2013-10-22T11:20:28.907 に答える
0

この種のアプリケーション専用の特別な Pig Loader を作成しました。これにより、Apache HTTPD ログファイルの解析がはるかに簡単になります。

これを豚のアプリケーションで次のように使用できます。

REGISTER httpdlog-pigloader-1.0-SNAPSHOT-job.jar

Clicks = 
  LOAD 'access_log.gz' 
  USING nl.basjes.pig.input.apachehttpdlog.Loader(
    '%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"',
    'IP:connection.client.host',
    'TIME.MINUTE:request.receive.time.minute',
    'HTTP.URI:request.firstline.uri',
    'STRING:request.firstline.uri.query.foo',
    'STRING:request.status.last',
    'HTTP.URI:request.referer',
    'STRING:request.referer.query.foo',
    'HTTP.USERAGENT:request.user-agent')
  AS ( 
    ConnectionClientHost,
    RequestReceiveTimeMinute,
    RequestFirstlineUri,
    RequestFirstlineUriQueryFoo,
    RequestStatusLast,
    RequestReferer,
    RequestRefererQueryFoo,
    RequestUseragent);

ここからダウンロードできます: https://github.com/nielsbasjes/logparser

于 2013-10-22T19:27:12.513 に答える