プロが教える店舗&オフィスのセキュリティ対策術

あるログから特定の文字列を抽出したいのですが
方法が思いつかず困っています

ログには下記に示したパターンが複数個あります。

TEST: *****: 種別コード  ****************
************************  テスト結果(OKorBAD)

*:可変長の文字列

この中からテスト種別コードと テスト結果を抜き出して

☆☆☆☆,OK
★★★★,OK
■■■■,BAD
  :
:

上記のデータにまとめたいのですがどうすればよいのでしょうか?

私自身はC言語はある程度理解しているつもりですが
文字列処理は苦手です。

このようなケースを対処しようした場合、最適なスクリプト言語
や方法論でも構いませんのでご教示いただければと思います。
いちからじっくり挑戦したいと思っています。
出来れば参考になるコードも合わせて記載していただけると
助かります。

どうか御願いいたします。

A 回答 (4件)

No.3 に対する補足です.



文字列の1文字目から3文字printする場合
print $2;

print substr($2,1,3);
のように変更します.しかし,プログラミングを身につけるには,
手間を惜しまずに自分で文法書を読み/調べることが必要です.
しっかり勉強してくださいね.
    • good
    • 0

awkで作ってみました.



test==1 { print $2 ; test=0;}
/^TEST/ {printf(" %s ", $3); test=1;}

行頭にTESTの文字列があれば,第3欄を書き出し改行しない.フラグtestをセット.
フラグtestが立っていたら,TESTの次の行と判断して第2欄を書き出し改行.

この回答への補足

awkコマンドを使うとシンプルな表現で強力な文字列処理が可能になるみたいですね。
大変参考になりました。
^TESTの前後に/で囲むのは理解できていませんが。。。

一つ質問はあるのですが
テスト結果(OKorBAD)の抽出は---第2フィールド目を抜き出すと
していますが、右端の最初の文字列を抜き出すといった
表現は可能でしょうか?
今後のログ出力の変化--テスト結果以外の文字列が複数分けて出力する可能性
を考えるとそちらで対応のほうが汎用性が高いとみています。

補足日時:2009/06/27 11:36
    • good
    • 0

2行で1つのテスト種別コードの結果というのは固定なのでしょうか?


それとも不定(1~複数)なのかな?

Windows系で処理したいなら、VBAとかで
・出力ファイルopen
・ログファイルopen
・ログファイルのEOFまで以下を繰り返す
-------------------------------------------
・行単位に読み込む
・行頭がTESTなら:で分割し、種別コードを抜き出して出力 + カンマ出力
・行頭がTESTでなければ 、テスト結果を出力 + 改行出力
-------------------------------------------
・ログファイルclose
・出力ファイルclose

Unix/Linux系で処理したいなら、1行で1つのテスト種別コードの結果に
なるように変換してから、awk等を使って抜き出す。
まぁ、スクリプト言語なら大抵VBAみたいなロジック組めるから
それで処理してもいいけどね。
    • good
    • 0
この回答へのお礼

>2行で1つのテスト種別コードの結果というのは固定なのでしょうか?
はい2行でワンセットです。


記載していただいた、ロジックでいけそうな気がします。
Widowsでの処理なので、Excel等のVBAは要件にあっているようですね。
該当する関数を探して組んでみようかと思います。

ご回答ありがとうございました。

お礼日時:2009/06/17 12:32

Excelで読み込んでデータ区切りで分ける。

いらない列を削除してCSVで出力
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
説明が少し足りなかったようで申し訳ないのですが
ログ全体にはパターン以外の文字情報があるため、(7割ぐらいを占めます)
上記のやり方ではいらない情報も含んでてしまいます。
行は削るには大量にあるためどのように対処すればよいか悩んでいます

お礼日時:2009/06/16 21:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!