1

分析を行いたい恐ろしい形式のログ ファイル (作成方法を変更することはできません) があります。

ログ ファイルの特定の行に一致する正規表現があります。これらの行には、分析の前に抽出してマトリックスに入れたいデータのビット (文字列と数値、RegEx の一致するグループによって捕捉される) が含まれています。

これを達成するための最良の方法は何ですか?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

ログ ファイルの 2 行目の 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 に答える