1

我有一个格式非常糟糕的日志文件(我无法更改它的创建方式),我希望对其进行一些分析。

我有一个匹配日志文件中特定行的正则表达式。这些行包含我想在分析之前提取并放入矩阵的数据位(字符串和数字,将被正则表达式中的匹配组捕获)。

实现这一目标的最佳方法是什么?gsub也许使用该功能?(我对 R 很陌生)

编辑,以解决评论。

我无法发布日志文件内容,但我可以举一个我想要的示例:

我的日志文件如下所示:

....
[Node_1] sometext [Ref:1111111, Strategy:4] Initialise Class1
[Node_1] sometext [Ref:1111111, Strategy:4] Initialise Class1 - 3432ms
some non relevant text
more non relevant text
[Node_4] sometext [Ref:1133311, Strategy:5] Run Class76
[Node_4] sometext [Ref:1133311, Strategy:6] Run Class76 - 5432ms
....

我只想读取末尾有时序的行,并且我希望矩阵中的相应行包含行中的数据位。

因此,如果我的正则表达式如下所示:

^\[([^]]*)\][^[]*\[([^]]*)\] (Initialise|Run) (Class[0-9]+) - ([0-9]+)ms$

我希望矩阵中的线是

\1,\2,\4,\5

IE 对于日志文件中的第二行,矩阵中的行将显示为:

Node_1, "Ref:1111111, Strategy:4", Class1, 3432
4

1 回答 1

2

gsubfn包中的strapplyc可以提取捕获:

pat <- 
"^\\s*\\[([^]]*)\\][^[]*\\[([^]]*)\\] (Initialise|Run) (Class[0-9]+) - ([0-9]+)ms$"

Lines <- "....
[Node_1] sometext [Ref:1111111, Strategy:4] Initialise Class1
[Node_1] sometext [Ref:1111111, Strategy:4] Initialise Class1 - 3432ms
some non relevant text
more non relevant text
[Node_4] sometext [Ref:1133311, Strategy:5] Run Class76
[Node_4] sometext [Ref:1133311, Strategy:6] Run Class76 - 5432ms
...."

# read in file
Lines2 <- readLines(textConnection(Lines))
closeAllConnections()

# extract lines ending in ms
Lines3 <- grep("ms$", Lines2, value = TRUE)

# pull out captures
library(gsubfn)
strapplyc(Lines3, pat, simplify = "rbind")[, -3]

最后一行的结果是:

     [,1]     [,2]                      [,3]      [,4]  
[1,] "Node_1" "Ref:1111111, Strategy:4" "Class1"  "3432"
[2,] "Node_4" "Ref:1133311, Strategy:6" "Class76" "5432"
于 2013-03-11T14:26:57.047 回答