• 締切済み

文字列データの抽出容易にしたい

あるログから特定の文字列を抽出したいのですが 方法が思いつかず困っています ログには下記に示したパターンが複数個あります。 TEST: *****: 種別コード  **************** ************************  テスト結果(OKorBAD) *:可変長の文字列 この中からテスト種別コードと テスト結果を抜き出して ☆☆☆☆,OK ★★★★,OK ■■■■,BAD   : : 上記のデータにまとめたいのですがどうすればよいのでしょうか? 私自身はC言語はある程度理解しているつもりですが 文字列処理は苦手です。 このようなケースを対処しようした場合、最適なスクリプト言語 や方法論でも構いませんのでご教示いただければと思います。 いちからじっくり挑戦したいと思っています。 出来れば参考になるコードも合わせて記載していただけると 助かります。 どうか御願いいたします。

みんなの回答

  • i10to4
  • ベストアンサー率0% (0/0)
回答No.4

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

  • i10to4
  • ベストアンサー率0% (0/0)
回答No.3

awkで作ってみました. test==1 { print $2 ; test=0;} /^TEST/ {printf(" %s ", $3); test=1;} 行頭にTESTの文字列があれば,第3欄を書き出し改行しない.フラグtestをセット. フラグtestが立っていたら,TESTの次の行と判断して第2欄を書き出し改行.

hanadaiku
質問者

補足

awkコマンドを使うとシンプルな表現で強力な文字列処理が可能になるみたいですね。 大変参考になりました。 ^TESTの前後に/で囲むのは理解できていませんが。。。 一つ質問はあるのですが テスト結果(OKorBAD)の抽出は---第2フィールド目を抜き出すと していますが、右端の最初の文字列を抜き出すといった 表現は可能でしょうか? 今後のログ出力の変化--テスト結果以外の文字列が複数分けて出力する可能性 を考えるとそちらで対応のほうが汎用性が高いとみています。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.2

2行で1つのテスト種別コードの結果というのは固定なのでしょうか? それとも不定(1~複数)なのかな? Windows系で処理したいなら、VBAとかで ・出力ファイルopen ・ログファイルopen ・ログファイルのEOFまで以下を繰り返す ------------------------------------------- ・行単位に読み込む ・行頭がTESTなら:で分割し、種別コードを抜き出して出力 + カンマ出力 ・行頭がTESTでなければ 、テスト結果を出力 + 改行出力 ------------------------------------------- ・ログファイルclose ・出力ファイルclose Unix/Linux系で処理したいなら、1行で1つのテスト種別コードの結果に なるように変換してから、awk等を使って抜き出す。 まぁ、スクリプト言語なら大抵VBAみたいなロジック組めるから それで処理してもいいけどね。

hanadaiku
質問者

お礼

>2行で1つのテスト種別コードの結果というのは固定なのでしょうか? はい2行でワンセットです。 記載していただいた、ロジックでいけそうな気がします。 Widowsでの処理なので、Excel等のVBAは要件にあっているようですね。 該当する関数を探して組んでみようかと思います。 ご回答ありがとうございました。

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

Excelで読み込んでデータ区切りで分ける。いらない列を削除してCSVで出力

hanadaiku
質問者

お礼

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

関連するQ&A

  • 文字列の抽出がうまくできません

    こんにちは。Perl初心者です。みなさんのお力をお借りしたく、初めて投稿させていただきました。よろしくお願いします。 現在、ファイルから特定した行を抽出し、その行に含まれる文字列を抽出しようとしているのですが、その文字列の抽出がうまくできません。 <文字列を含むファイル:xxx.txt> -------------------------- To 鈴木 太郎さん 1行目 : 01,りんご, 3 個, ナシ, 1個 14行目 02,キャベツ, 3 個, なす, 10本 15行目 : -------------------------- <スクリプトファイル:yyy.pl> -------------------------- open(DAT, "./xxx.txt") || die("can't open file : ($!)"); @file = <DAT>; close DAT; if ( $file[0] =~ /(\W+\s)(\W+)/ ) { print "$1\n"; } print "$file[13]\n"; print "$file[14]\n"; -------------------------- <結果> -------------------------- 鈴木 -------------------------- 抽出したい結果は「鈴木 太郎」なんですが、上記のような結果(「1byteのスペース」鈴木「2byteのスペース」)になってしまいます。xxx.txtの「To」と「鈴木」の間と、「鈴木」と「太郎」の間にはそれぞれ1byteのスペースがあります。どうやったら「鈴木 太郎」と抽出できるか教えてください。 スクリプトは「Copal2(ver2.77)」というツールを使って作りました。そのツールではエンコードは「自動判別」となっており実際何が使われているのか分かりません。 また他にも質問があります。 今抽出したい行を指定して出力させてますが、 「To」から始まる行 「01」といった2桁の数字から始まる行 というような抽出の仕方をしたいのですが可能でしょうか? 本当に初心で大変恐縮ではありますが、教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 文字列連結を行いたい

    以下のようなテーブル「TABLE_A」があります。 何とかSQLで抽出結果のようにしたいのですが、 方法が思いつきません。 【TABLE_A】  CODE | HIDUKE  -----|------------  1 | 2005/06/01  1 | 2005/06/02  1 | 2005/06/03  2 | 2005/06/01  2 | 2005/06/03 【抽出結果】  CODE | rst  ---------------------------------------------  1  | 2005/06/01 2005/06/02 2005/06/03  2 | 2005/06/01 2005/06/03  (列「CODE」単位に列「HIDUKE」を文字列連結を行う) どなたかご教授ください。 よろしくお願いいたします。

  • 文字列の抽出

    指定したファイルの中から'<'と'>'とで囲まれた部分文字列を抽出したいのですが方法がわかりません。どのようにしたらできるでしょうか? *ファイルは制御コードが混じっているのでバイナリとして扱わないといけないかもしれません。 よろしくお願い致します。 ------------------------------------------------- open(IN, "test.dat"); open(OUT, "> out.txt"); binmode(IN); while (<IN>) { /^<(\w+)>$/; print OUT "$1\n"; } close(IN); close(OUT);

    • ベストアンサー
    • Perl
  • EXCELで 「○○でない」抽出(文字列)

    従業員コードからRIGHT関数を使用して「00」(文字列)を抽出しました。 ところが全社員の中から 「00」でない と抽出しようとしたところうまく抽出できません。 「00」である と抽出するのはうまくできます。 何か理由があるのでしょうか?

  • sedなどで、特定の文字列の後の文字列を抽出したい

    sedなどで、特定の文字列の後の文字列を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。 echo abcXYZ123defghi | sed ... のようにして実行させたいです。

  • 特定の文字列が一致する行から、文字列を抽出する方法

    ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか? 処理: test.txt中に以下の文字列が記載されています。 ----- TEST011:FILE00 TEST01:FILE01 TEST02:FILE02 XTEST01:FILE01 XTEST02:FILE02 ----- test.txtから、TEST01に対応する文字列FILE01を取得したいです。 当初、strchrを利用すれば良いかと考えていたのですが、 TEST011の行が先に抽出されてしまい、うまくいきません。 どなたか解決方法を教えていただけないでしょうか。

  • エクセルの文字列で似たものを抽出する

    いくつかあるエクセルの文字列のうち, 一番にてる文字列を抽出する方法を教えてください. たとえば,画像のように入力してある30通りの文字列のうち, ★の文字列に一番似ている文字列は1~30番の文字列のうちどれか, を知る方法について,具体的に教えていただけると嬉しいです. 関数は,不得意なのを踏まえて,教えていただけるとなお嬉しいです. どうぞよろしくお願いします.

  • エクセル-抽出したデータや文字列を消さない方法

    他のファイルから例えばVLOOKUP関数で数値や文字列を抽出する場合、そのファイルが消えた場合抽出したデータや文字列も消えてしまいます。ファイルが消えてもデータや文字列を残すには別のセルにコピーして形式を選択して貼り付ければよいのですが、そうしなくても簡単に別のセルに数値や文字列として残す方法はないでしょうか。回答よろしくお願いいたします。

  • 全角で囲まれた文字列の抽出をしたい。

    全角で囲まれた文字列の抽出をしたい。 phpコマンド preg_match($pattern,$str,$match)を使い $str = "で検索した結果 1~10件目 / 約14件 - 0.09秒"; を 「約」と「件」で囲まれた「14」という文字列を抽出したいのですが $patternの正規表現がわかりません。 教えてください。

    • ベストアンサー
    • PHP
  • Excel 2007 マクロ 文字列の抽出について

    Excel 2007 マクロ 文字列の抽出について 元データのB列(番号)に5桁、3桁、7桁の数字が入っています。 その番号をSheet2にコピーして貼り付けます。 貼り付ける際に、5桁、3桁、7桁をそれぞれの列に入れます。 Sheet2のB列(番号2)で400番台はF列(種別)に国産 同じくB列(番号2)で900番台はF列(種別)に外国産 を反映するようにしたいです。 どのようなマクロになりますでしょうか。 サンプルがございましたら、お教えください。

専門家に質問してみよう