Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用R或python转换日志文件数据以进行分析的最佳技术_Regex_R_Data Processing_Log Files - Fatal编程技术网

Regex 使用R或python转换日志文件数据以进行分析的最佳技术

Regex 使用R或python转换日志文件数据以进行分析的最佳技术,regex,r,data-processing,log-files,Regex,R,Data Processing,Log Files,我想将日志文件转换为可以在R中读取的格式,以便进行进一步分析 我在寻找解决方案时遇到的事情。 Regex、RecordBreaker、OpenRefine或GoogleRefine,R有stringr和dplyr等 我尝试过使用OpenRefine,它似乎很有用,但仍然希望有更多的指导,因为他们说日志文件是真正的大数据 数据是这样的 M 8000000 NADR 14273 18:17:43.22 STC35256 00000291 DSNT375I +HPN2 PLAN=DISTS

我想将日志文件转换为可以在R中读取的格式,以便进行进一步分析

我在寻找解决方案时遇到的事情。 Regex、RecordBreaker、OpenRefine或GoogleRefine,R有stringr和dplyr等

我尝试过使用OpenRefine,它似乎很有用,但仍然希望有更多的指导,因为他们说日志文件是真正的大数据

数据是这样的

M 8000000 NADR     14273 18:17:43.22 STC35256 00000291  DSNT375I  +HPN2 PLAN=DISTSERV WITH 026
 D                                         026 00000291          CORRELATION-ID=db2jcc_appli
 D                                         026 00000291          CONNECTION-ID=SERVER
 D                                         026 00000291          LUW-ID=G93FF023.DB11.CDD5C8DE241F=29839
 D                                         026 00000291
 D                                         026 00000291  THREAD-INFO=SAPHPNDB:9.63.240.123:SAPHPNDB:db2jcc_application:DYNAMIC
 D                                         026 00000291  :46835:*:*
 D                                         026 00000291          IS DEADLOCKED WITH PLAN=DISTSERV WITH
 D                                         026 00000291          CORRELATION-ID=db2jcc_appli
 D                                         026 00000291          CONNECTION-ID=SERVER
 D                                         026 00000291          LUW-ID=G93FF07C.EE5F.CDD5C82B2305=29799
 D                                         026 00000291
 D                                         026 00000291  THREAD-INFO=SAPHPNDB:9.63.240.33:SAPHPNDB:db2jcc_application:DYNAMIC:
 D                                         026 00000291  46835:*:*
 E                                         026 00000291          ON MEMBER HPN2
............................................................................
底层结构是这样的

M 8000000 NADR     14273 18:17:43.22 STC35256 00000291  DSNT375I  +HPN2 PLAN=DISTSERV WITH 026
 D                                         026 00000291          CORRELATION-ID=db2jcc_appli
 D                                         026 00000291          CONNECTION-ID=SERVER
 D                                         026 00000291          LUW-ID=G93FF023.DB11.CDD5C8DE241F=29839
 D                                         026 00000291
 D                                         026 00000291  THREAD-INFO=SAPHPNDB:9.63.240.123:SAPHPNDB:db2jcc_application:DYNAMIC
 D                                         026 00000291  :46835:*:*
 D                                         026 00000291          IS DEADLOCKED WITH PLAN=DISTSERV WITH
 D                                         026 00000291          CORRELATION-ID=db2jcc_appli
 D                                         026 00000291          CONNECTION-ID=SERVER
 D                                         026 00000291          LUW-ID=G93FF07C.EE5F.CDD5C82B2305=29799
 D                                         026 00000291
 D                                         026 00000291  THREAD-INFO=SAPHPNDB:9.63.240.33:SAPHPNDB:db2jcc_application:DYNAMIC:
 D                                         026 00000291  46835:*:*
 E                                         026 00000291          ON MEMBER HPN2
............................................................................
  • 每条记录以M开头,以E结尾

  • D是提供有关单个记录的更多信息的变量。 因此,如上面的日志文本所示,第一个实例以M开头,以E结尾,在D之间,提供相关ID、连接ID等信息

  • 因此,上面的日志文件应该是数据表格式的一行,以D作为变量

      [1]: http://i.stack.imgur.com/hw9zY.png
    
    可能的解决办法:

    data <- readLines("data1.txt")
    pattern <- "(M\\s+\\d+\\s+)(\\w+\\s+)(\\d+\\s+)(\\d+:\\d+:\\d+.\\d+\\s+)(\\w+\\s+)(\\d+\\s+)(\\w+\\s+)(\\+\\w+\\s+\\w+(\\=|\\s+)\\w+\\s+\\w+\\s+\\d+)"
    
    m <- regexec(pattern,data)
    
    matches <- regmatches(data, m)
    
    parts <- do.call(rbind,lapply(regmatches(data, m), `[`,c(2L,3L,4L,5L,6L,7L,8L,9L)))
    
    colnames(parts) <- c("ID1","ID2","Date","Time","ID3","ID4","ID5","description")
    
    parts <- as.data.frame(parts)
    
    parts1 <- na.omit(parts)
    

    data好吧,你可以一次做一行日志。伪代码应该是这样的:

    IF logrow.record == 'D' AND logrow.type == 'CORRELATION' THEN
      current.record$correlation = logrow.value
    ELSE IF logrow.record == 'E' THEN
      all.records[n+1] = current.record
    ELSE IF logrow.record == 'M' THEN
      current.record = empty new record
      current.record$ID = logrow.value
    END
    
    基本上如果是M,那么你就开始一个新的记录。如果是E,则结束当前的一个。如果是D,则根据当前的其他信息将数据添加到当前记录中


    这不会太容易,但也不会太难。从一条记录开始,创建大量中间变量,然后一步一个脚印。

    是否预定义了D的总集合?否则,您如何想象将不同的D映射到变量?这不是预定义的,它是变化的,可能出现的变量数量最多,并且可能出现多个情况,其中一个子集可能会出现。所以相关ID应该是一列,但在日志中没有生成相关ID的代码段中,我们应该有NA。