私は解析したいログエントリのファイルを持っています。すべての行は次のようになります。Rで正規表現の構文を書く方法
F 20160602 14:25:11.321 F7982D50 GET 156.145.15.85:37525 xqixh8sl AES "/pcgc/public/Other/exome/fastq/PCGC0077248_HS_EX__1-06808__v3_FCC49HJACXX_L7_p1of1_P1.fastq.gz" "" 3322771022 (0,0) "1499.61 seconds (17.7 megabits/sec)
各部分の意味は次のとおりです。
F - ラインの識別子
20160525 - 日付(YYYYMMDD)
17:52:38.791 - タイムスタンプ(HH:MM:SS.SSS)
F798259D - 転送識別子
156.145.15.85:46634 - IPアドレスと関連するポート
xqixh8sl - ユーザ名
AES - 暗号化レベル(かもしれない - (ダッシュ))
"/pcgc...fastq.gz" - 転送されたファイル(「中)
"" - ( "追加の文字列が空でなければならない")
2951144113 - 転送されたバイト
(0,0) - エラー
"2289.47秒(10.3メガビット/秒)" - 私は、データファイルをインポートしたとread.patternを使用しています
転送に関するデータ()関数を使用して解析し、フィールドに分けます。私は、2,3,4,5,6,7,8,10、および12と相関関係がある情報だけを必要とします。しかし、私は正しいパターンを得ることができません。前に、私はこのパターンを使用して必要なフィールドのうちの2つを取得するために管理:
pattern <- "^F ([0-9]+) [^ ]* .* \\(0,0\\) (.*)$"
これは私にこのように見えたデータフレームを与えた:
date speed of data transfer
1 20160525 "1.62 seconds (1.30 kilobits/sec)"
2 20160525 "0.29 seconds (1.93 kilobits/sec)"
3 20160525 "0.01 seconds (34.0 kilobits/sec)"
4 20160525 "0.01 seconds (102 kilobits/sec)"
5 20160525 "38.05 seconds (214 megabits/sec)"
これらは2つだけのフィールドです私は必要ですが、それを追加しようとするたびに構文が乱れてしまいます。例:
pattern <- "^F\\s([0-9]+)\\s[0-9:.]+\\s([:alnum:])\\s[A-Z]\\s([0-9.:]+)\\s([:alnum:])\\s([•])\\s[:punct:][A-z][:punct:]\\s[:punct:]\\s.* \\(0,0\\) (.*)$"
これは機能しませんでした。誰かがこれを書いて助けてくれますか?それは私を夢中にさせている。ありがとう!
:
これは結果でした。で始まる:xに2つの値がある場合、unlist()は異なる観測値を1つのベクトルに平坦化し、t()は1行の行列を与えますが、data.frameに変換するには2行が必要です。そして、例えばデータ転送のスピードがスペースを含んでいるという事実は、あなたの最初の行でさえも無効にします。 –
ベクトル内の各要素に対して適用範囲内のコードを使用すると、実行可能なソリューションです。私が言ったように、それはデータがどのように構造化されているかによって異なります。残りの行がこの構造に非常によく似ていない場合は、分割がうまく行かないことに同意します。 – Benjamin
私はコードを実行しましたが、これを使用すると、ある種のループが必要になるようです。この課題の目的は正規表現の使い方を学ぶことだったので、できるだけ避けたい。しかし、あなたの提案をありがとう。 – stargirl