• 締切済み

アプリケーションのログファイルから、特定文字列を抽出し、

アプリケーションのログファイルから、特定文字列を抽出し、 一致する場合ユーザ名とアクションをまとめたcsvファイルに出力をさせるvbsを作成したいのですが、 いろいろと調べても殆どが結果に結びついていません。 イメージは以下のようなものになります。 インプットファイル(ログファイル)には、以下のように出力されています。 20100601 USER1 update 20100601 USER2 logon 20100601 USER3 delete . . . . このファイルから、たとえばupdateを抽出し、その行にupdateの文字列が含まれていたら、 行内にあるUSER1を抽出させます。 処理が終わったら、以下イメージのCSV出力ファイルを作成します。 DATE,USERNAME,logon,update,delete 20100601,USER1,0,1,0 20100601,USER2,1,0,0 20100601,USER3,0,0,1 集計はエクセルを使用するのでカウントはせず、フラグ(1)を立てるだけをイメージしています。 updateの文字列は実際には記号等が含まれるので、grepのような正規表現にて抽出しないと難しい と思うのですが、vbsでのgrepがちょっとよくわかりません。 http://okwave.jp/qa/q5973058.html 上記アドレスで同じような質問がされていたのですが、 記載内容を実行してもエラー出力されてしまったため、質問させて頂きました。 なにとぞよろしくお願い致します。

みんなの回答

  • fujiponxx
  • ベストアンサー率32% (186/580)
回答No.2

どう見ても、左から日付8ケタ、 ユーザ名5ケタ、のこりアクションに見えますけど。 そういう仕様で、桁数でちょんぎれば 日付もユーザ名とアクションもいっぺんに取得できますけど。 >検索したい文字列は””で囲んでチェックを行うことをイメージしています。 ちょっと意味がわかりません。 検索したいレコードの中の文字列がわかってるならなにかで囲む必要ないですね。

smilemark2009
質問者

補足

出力例は単純にしたイメージで、実際の記載はまったく異なります。曖昧な書き方で申し訳ありませんでした。 アプリケーションのログなので、デスティネーション等の情報が雑多に入り、桁数で抽出するのは不可能です。 また、アクションも「update」のように単純ではなく、=や/等を含んでいる特定文字列です。

  • fujiponxx
  • ベストアンサー率32% (186/580)
回答No.1

>updateの文字列は実際には記号等が含まれるので 検索したい文字列(の仕様)が明確じゃないとだめでしょうね。 ログファイルの内容がスペースで分割されているのであれば、 そのままexcelに読み込んでから処理すればいいとおもいますけど。 テキストを読み込む場合でも、 1行読み込んで、判定して、出力してというのを 繰り返せばいいと思いますけど。 わざわざ抽出する必要はないと思います。

smilemark2009
質問者

補足

検索したい文字列は””で囲んでチェックを行うことをイメージしています。 内容はスペース等で分割されてはおらず、 日時毎にイベントをだだだだっと書き込んであるだけのログファイルです。 >テキストを読み込む場合でも、 >1行読み込んで、判定して、出力してというのを >繰り返せばいいと思いますけど。 >わざわざ抽出する必要はないと思います。 ユーザ名を拾うには、 各単語を検索→同行にあるユーザ名抽出 という必要があるように思えるのですが、なにか誤っているでしょうか?

関連するQ&A

  • ログファイルに記録されているイベントを抽出したい。

    ログファイルに記録されているイベントを抽出したい。 http://okwave.jp/qa/q6004361.html 上記にて質問させて頂いているのですが、要領を得ない状況になっているので、 再度記載を改めて質問させて頂きます。 あるアプリケーションのログファイルを読み込み、 記載内容に沿ってcsvファイルにて結果出力をするvbscriptの、 具体的なコーディングの内容を教えて下さい。 処理内容は 「ログファイル」を読み込み、「特定文字列1」を検索し、 マッチした行があれば、同じ行にある「USER????」という文字列を抽出、 行ごとの結果としてcsvファイルに以下のように書き込みます。 YYYYMMDD,USER0001,1 YYYYMMDD,USER0002,1 YYYYMMDD,USER0004,1 YYYYMMDD,USER0031,1 YYYYMMDD,USER0032,1 (最後の1はフラグとして使用) 出力csvは以下の見出しが書かれている「空.csv」に上記結果を追記で出力を考えています。 DATE,USERNAME,event1 同様に「特定文字列2」~「特定文字列8」を検索し、イベントごとに同じ処理を実施します。 ロジックに不明点があればご指摘下さい。 よろしくお願い申し上げます。

  • ファイル内の複数の特定文字列を抽出する方法

    ファイル内の複数の特定文字列を抽出する方法 linuxで、あるファイル内の特定のパターンに 該当する文字列の抽出方法を教えてください。 やりたいこと・前提条件 (0)linuxといいながら実はCygwin(タブン影響しないと思う) (1)特定のパターンはファイル内のどこに出現するか分からない (2)特定のパターン文字列中には改行は含まない。つまり必ず同一行内 (3)特定のパターンはファイル中に0回以上出現する (4)まったく同じ文字列は省きたい (5)特定のパターンは同一行中に複数回出現することもあり、すべて抽出する とりあえず、以下のコマンドを書きましたが不十分です。 grep -E "${PATTARN}" log.txt | sed -r "s/^.*(${PATTARN}).*$/\1/g" | sort -u これだと、(0)~(4)までの希望は実現できました。 (5)が未実現です。 JavaとかJavaScriptとかvbsとかなら正規表現にヒットした複数の文字列を 連続的に取り出して処理する方法は思い浮かぶのですが、 linuxコマンドの範囲だとどうすればいいかよくわかりません。 (5)を実現する方法。これを教えてください。 参考情報としてサンプルファイル内容と正規表現パターン・ 得たい結果も書いておきます。よろしくお願いします。 ◎参考 ○log.txt -------- RASCAL-1, RASCAL-123 [RASCAL-456] *** ** * *** [RASCAL-1] RASCAL-456 RASCAL-45 -------- ○PATTARN=RASCAL\-[0-9]{1,5} ○得たい結果 RASCAL-1 RASCAL-45 RASCAL-123 RASCAL-456

  • 特定の文字列の抽出について

    GGACTTTCA・・・のようにゲノム塩基配列の一部が記してあるファイルから、4個の文字列に、それを逆順にした文字列が続いたもの(CCAGGACC、TGCCCCGTなど)を抽出したプログラムを作成したいのですが、上手く結果が出力できません。 おそらく、最初の任意の4文字を配列に入れ、後半の4つの部分に逆にして入れると思いました。ですが、配列に入れる方法、配列に入れた文字を逆に出力する方法、文字を4つ(もしくは8つ)に限定する方法がわからず、プログラムが動きません。 方法について、意見アドバイス等よろしくお願いします。

    • ベストアンサー
    • Perl
  • フォルダ内の複数ファイルから抽出(vbs)

    web のログファイルの集計のため、以下が可能なコードを教えていただきたい。 そのまま使えるコードですと非常に助かります。 (vbs または vba) logというフォルダに、複数のログファイルが入っています。 ファイルの文字コードは、UTF8  改行は、LFです。 この複数のファイルから、特定の文字列の入っている行を抜き出して、 1つのCSVファイルに書き出したい。(文字コードをShift-Jis 改行は、CRLFに変えたい) どうかお助けください。宜しくお願いいたします。

  • 文字列抽出についてご質問です。

    文字列抽出についてご質問です。 csvファイルの中に、http://hoge.com/◎◎/goods_parts/◎◎/数字1~5桁/◎◎・・・ のようなデータがずらっと1000行くらいあって、 このURLの中にある数字1~5桁が、別ファイルの1~5桁の数字だけがあるファイルと合致したら、 出力のようにしたいです。 そこで、phpかexcelvbの正規表現で、 ・数字のみを抽出するサンプルコードをおしえていただけないでしょうか。 なにとぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • バイナリファイルからの文字列抽出

    バイナリファイルをCSVに変換するツールがございます。 CSV変換した後の文字列は、"日付" "数字"となっています。 今回、問題となっておりますのは、 バイナリファイルのサイズが大きく CSV変換に時間がかかってしまいます。 少しでもバイナリファイルのサイズを小さくするべく、 バイナリファイルから特定の"日付"を 抽出しようと考えておりますが、 可能でしょうか? また、その手法をご教授ください。 OSはWINDOWSです。 よろしくお願いします。

  • perl ファイル内文字列抽出

    お世話になっております。 perlでファイルない文字データを抽出する作業をしたいですが、やり方が分からなくて、ご存知の方ぜひ教えて頂けばと思います。 001.html内の内容 <html> <head> </head> <body> テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト<img src="bbb" \/><img src="ccc" \/><img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト</body> </html> 質問内容 (1)このなかの<img src="aaa" \/>イメージファイル名を抽出したいです。本文ではイメージファイルの拡張子はなしです。入力の間違いではないです。 (2)抽出した文字列をimg.txtファイルで出力 以上よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルの文字列の処理の質問

    今ファイルに対して文字列の処理をしています。 あるファイルに対して一定の文字列を検索して、その検索したい文字列が なければ、その一行をファイルに出力したいですが、手元にwindowsバージョン のgrep.exe で実現すると考えています。 しかし、検索したいファイルは、文字列が入ってない行があります。 そのため、検索したい文字列が存在しない行は、改行だけの行を結果として 出力されています。改行だけの行を除きたいですが、どうすればいいか? ファイルのsjisです。例えば、内容としては、以下のようになっています。 aiiiiii ballllll fafafa 777777 とするファイルがあります。そのファイルに対して、aという文字が入ってない行を 取りたいですが、実際にgrep -v "a" ファイル名 でやると、777777の行とすべて 改行だけある行が取られてました。 777777だけをとる方法がありますでしょうか?

  • @のみを含む文字列を抽出

    メールをエクスポートしたテキストファイルがあり、そこからメールアドレスだけを抽出したいと思っています。 Windowsで仕事をしており、とりあえずQGREPというフリーウェアを使っているんですが、「@」という文字列で検索をかけると、「@」を含む「行全体」を出力してしまいます。 出力イメージとしてはこんな感じです。 ========================================== From Postmaster@xxxx.xxxx.co.jp Mon Sep 06 05:10:13 2004 Message-ID: <20040905201013.15166.qmail@xxxxx.com> 発行人: XX XX xxxxxxx@xxxx.com ========================================== こういうファイルからメールアドレスだけを抽出する方法が分からないので、今は手作業でやっているんですが、@を含む文字列(文字の塊)だけをうまく抽出する方法はないでしょうか? 宜しくお願いします。

  • 特定の列の抽出

    CSVファイルがあり特定の列を抽出したいんですが、excelが入ってなくマクロ(VB)が使用できない為、そのような処理をバッチで処理することは可能でしょうか?教えてください。ちなみに抽出条件は日付です。