Help us understand the problem. What is going on with this article?

phpをスクリプトとして利用して大容量のログデータを検索出力する

More than 3 years have passed since last update.

むかし(2007年8月7日)作ったログデータ検索用phpスクリプト公開しておきます。

メリットとしては

  • GZファイルのままでも検索できる
  • 1行ずつ読み込んでヒットしたら書き出すのでメモリを使わない?
  • 複数キーワードで検索できる

以下をgzgrepor.phpなど適当なファイル名で保存して、
php gzgrepor.php [ファイル名] [キーワード1] ...
というように実行すると、キーワードでgrepした結果のファイルが作成されるものです。

キーワードは半角スペース区切りで複数指定できます。or検索ができるってところでしょうか。スペースも含むキーワードの場合はダブルコーテションで囲んで下さい。(windowsだけかも?)

このphpファイルをどこかに置いてパス通しておくと便利かもしれないけどまだ試したことない。

まだまだブラシュアップするところあると思いますのでアドバイスお待ちしております。
他にもnot検索させるのも作ったりしてます。

gzgrepor.php
<?php


    // 引数チェック
    if ($argc < 3) {
        print "引数が不正です。\n";
        exit;
    }


    // 解析対象ファイル名取得
    $filename = $argv[1];
//  $keyword = $argv[2];

    // 検索結果出力ファイル名
    $dfilename = preg_replace("/\.log\.gz$/","",$filename);
    $dfilename = $dfilename . "_" . $keyword . ".txt";

    //情報出力
    print "検索対象ファイル  :";
    print $filename . "\n";
    print "検索対象キーワード :";
    print $keyword  . "\n";
    print "検索結果出力ファイル:";
    print $dfilename . "\n";

    //gzファイルオープン
    $zh = gzopen($filename,"rb");
    if ($zh == false) {
        print "gzファイルのオープンに失敗しました。\n";
        exit;
    }

    // 出力ファイルオープン
    $fp = fopen($dfilename,"wb");
    if ($fp == false) {
        print "出力ファイルのオープンに失敗しました。\n";
        exit;
    }

    // 検索キーワード取得
    array_shift($argv);
    array_shift($argv);

    $cnt = 0;
    while (gzeof($zh) == false) {
        // 1行取得
        $line = "";
        $line = gzgets($zh);

        $flg = 0;
        foreach ($argv as $tmp) {
            if (strstr($line,$tmp) != false && $flg == 0) {
                fputs($fp,$line);
                $cnt = $cnt + 1;
                $flg = 1;
            }
        }


    }

    //出力ファイルクローズ
    fclose($fp);

    //gzファイルクローズ
    gzclose($zh);

    print "\n";
    print "該当データは" . $cnt . "件ありました。\n";
    print "\n";
    print "処理が完了しました。\n";
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした