2017-11-08 13 views
0

ログデータがあり、変数に各情報を抽出したい豚スクリプトでregexを使ってログから文字列を抽出する

以下は、1行のサンプルです。 {:id => 306、:name => "bblite"、:cpu => {:クォータ=> 4、:allocated => 4、:actual => 0}、:memory => {:quota => 8192 、:alloc => 8192、:actual => 8578}、:cluster_stats => {"wc1104" => {:cpu => 0、:mem = 8578}}}

すべてのIDを持つ変数が必要です、すべての名前を持つ変数、CPUを持つ変数、すべてのクラスター統計を持つ変数

以下は、私の豚スクリプトの一部です。私はidsを格納することができますが、私は正規表現を使用して残りの部分をどのように抽出するのか分かりません。

。 。 。

matching_messages = FILTER raw_lines BY (LOWER(message) MATCHES '.*cc_altus-plaform.*'); 

ids = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'id=>\\d*',0); 

names = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"\\",',0); 

line_with_date = FOREACH matching_messages GENERATE 
DateFormatter(timestamp) AS formatted_time: chararray, message; 

DUMP names; 

答えて

0

次のコードスニペットは、働く私が書いた正規表現です:

id = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'(?<=id=>)\\d*',0); 

name = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"[\\w]*\\"',0); 

cpu = FOREACH matching_messages GENERATE REPLACE(REGEX_EXTRACT(message, 'cpu=>\\{.*?\\}',0), ',',''); 

memory = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'memory=>\\{.*?\\}',0); 

cluster = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'cluster_stats=>\\{.*?\\}',0); 
関連する問題