我有日志数据,我想将每个信息提取到一个变量中
以下是示例单行日志。
{:id => 306,:name =>“bblite”,:cpu => {:quota => 4,:allocated => 4,:actual => 0},:memory => {:quota => 8192, :allocated => 8192,:actual => 8578},:cluster_stats => {“wc1104” => {:cpu => 0,:mem => 8578}}}
我需要具有所有ID的变量,具有所有名称的变量,具有CPU的变量和具有所有群集统计信息的变量
以下是我的 pig 脚本的一部分。我可以存储ID,但不知道如何使用正则表达式提取其余ID。
。
。
。
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;
最佳答案
以下代码段是我编写的可运行的正则表达式:
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);
关于regex - 在Pig脚本中使用正则表达式从日志中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47184158/