• ベストアンサー

ログファイルからキーワードを検出、何行目か返す。

angelusbellの回答

回答No.3

自己流なので 回りくどいかもしれませんが open(IN,".ログファイル") @lines = <IN>; close(IN); $nn=0; foreach $line (@lines){ ($NAME,$TITLE,$NAKAMI,$LOCALTIME) = split(/&/,$line); $LOCALTIME=substr $LOCALTIME,10; ##「LOCALTIME=」の文字を除く if($検索ワード eq $LOCALTIME){$gyou=$nn;} else{$nn++;} } これで何行目というのが $gyouに入るはずです

関連するQ&A

  • 1行だけ削除。

    log.logというログファイルの中のデータから、 NAME=hoge&GROUP=hogehoge というような1行だけを削除する場合はどのようにしたらいいのでしょうか?

    • 締切済み
    • CGI
  • CSVファイルの最終行のデータを取り出したい

    PHPでCSVファイルのデータを取り込もうとしています。 全てのデータを表示させるのであれば、「while」などを使って書くのが一般的かと思うのですが、 最終行のデータ(「,」で区切られた最も左のフィールド)だけを取り出したいので、 以下のように書いてみました。 <?php $file = fopen("hoge.csv","a+"); $nakami = fgetcsv ($file, 1000, ","); echo $nakami[0]; fclose($file); ?> 「fopen」のmodeについて、「r」にすれば先頭から読み込まれ、 「a+」もしくは「ab+」ならばファイルの終わりにポインタが来る・・・ と色々なマニュアルに書かれていましたので、上記のようにしてみたのですが、 $nakami[0]で表示されるのは、1行目の最左列のデータになってしまいます。 1)このやり方(modeの設定)では最終行のデータ取得は不可能なのか 2)どのようなやり方なら最終行のデータ(のみ)は取得できるのか お知恵をお借りできれば幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • ログファイルに余計なスペース

    以前も同じような質問をして回答をいただいたのですが、 ちょっと状況がかわったので再度質問させていただきます。 以前は print FILE"@log"; とするとスペースが入る、としたところ print FILE @log; とすればOKという回答をいただき、解決していたんですが、 今回は print FILE"$ID<>$COUNT<>$TITLE<>$NAME<>$PASSWORD<>$COLOR<>$NAKAMI<>$TIME<>$SEARCHKEY\n@log_file"; としたいのです。 やはり半角スペースが行頭に入ってしまいます。 これを回避するにはどうしたらいいですか?

  • CGIログファイルから1行分ずつ表示。

    ログファイルが以下のように、 NAME=***&TITLE=***&HIDUKE=***= NAME=***&TITLE=***&HIDUKE=***= NAME=***&TITLE=***&HIDUKE=***= となっています。 このログファイルの中身を表示させようとしたのですが、1番上のデータ(1番古いデータ)しか表示されません。 これを数行分(できれば最新5件、など)表示させたいのですが、どのようにすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • cgiのログの書き方

    ここで教えてもらってログファイルの書き方(挿入のようなカンジで)をやってみたんですが、どうしても思い通りの動きをしません。 希望としては、IDが一緒なら、その同じIDの下に書き込みを行う。同じIDが見つからなければ、一番上に書き込みを行う。 というようにしたいのです。 上記のことを行うために以下のコードを書きました。 --------------- for ($w=0;$w<$gyou+1;$w++){ @log3 = split(/&/,$log2[$w]); foreach(@log3){ ($keyw,$valuew) = split(/=/,$_); $FORMw{$keyw} = $valuew; }#foreach open(FH3,">>log.log"); if ($ID == $FORMw{'ID'}){ print FH3"ID=$ID&COUNT=$COUNT&TITLE=$TITLE&NAME=$NAME&PASSWORD=$PASSWORD&NAKAMI=$NAKAMI&COLOR=$COLOR&TIME=$year/$m on/$day $hour:$min:$sec&SEARCHKEY=$year$mon$day$hour$min$sec\n"; last; } else { if($w+1 == $gyou){ print FH3"ID=$ID&COUNT=$COUNT&TITLE=$TITLE&NAME=$NAME&PASSWORD=$PASSWORD&NAKAMI=$NAKAMI&COLOR=$COLOR&TIME=$year/$m on/$day $hour:$min:$sec&SEARCHKEY=$year$mon$day$hour$min$sec\n"; close(FH3); } } }#for --------------- どうしてもログファイルの最新情報としてしか書き込みがされません。 また、最新ログを1番上に書き込む、ということをしたいのですができますか? 日付順などで並べ替えをしてしまうと、ぐちゃぐちゃになってしまうので、並べ替えを行わずに、です。 またこのような書き込みの仕方をしなくても、 例えば並べ替えで、Excelみたいに、1番目と3番目を基準に並べ替え、とかでできますか? (私は1つの方法でしか知らないので、どうしても意図する順番になりません。)

  • ログファイルからデータ呼び出し。

    ログファイル(例えば1.logという名前とします)の中身を呼び出し、それを現在表示されているcgiのフォーム内に 表示させるにはどのようにしたらいいのでしょうか? たとえば、クッキーみたいに <input type=text name=021118 value=***></input> とすればできるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • バッチコマンドで指定行を抽出しファイル名を含める

    日付毎に複数ファイルになっているftpのログファイルから必要な行だけを1ファイルに まとめたいのです set spath=d:\データ for /d /r %spath% %%d in ( * ) do ( type "%%d\*.log"|findstr /i ".csv">>%spath%\抽出ログ.txt ) で目的のものにかなり近いデータを抽出することができました ex110825.log 00:01:21 172.21.111.123 [6443]created /hoge/hoge.csv 226 しかし問題がありこのデータには日付がありません 日付部分はファイル名に含まれていますex110825.logのように・・・・ なので ex110825.log 00:01:21 172.21.111.123 [6443]created /hoge/hoge.csv 226 工夫次第でこのような形でデータを出力する事ができるでしょうか? アドバイス下さい

  • ログファイルを後ろから検索し、最初のマッチで止める

    CentOS 5 を使っています。 とある巨大なログファイルがあります。 例えば grep hoge log.txt | tail -1 みたいな事をやっているのですが、これをどうにか高速にできないですかね? 上記だと、ログファイルを全検索しているので効率が悪いです。 (ログファイルはファイルの最後の方に新しい情報が記録されているので、その最新ログが見たいのです) 安易に思いつくのは tac コマンドを使って tac log.txt | grep hoge | head -1 でもいいんですが、grep で「最初のマッチで終了」してくれるオプションもなさそうです。 何か良い方法があればご教示願います。 (ruby 等でスクリプトを書いても良いのですが、何とかワンライナーで出来ないかなと) P.S ちなみに実際の見たい情報は「grep でマッチした前後数行」なので -A や -B オプションを使っています。

  • jarファイルとして作成されたJavaのログ出力

    お世話になっております。 ご存知の方がいらしたら教えて下さい。 Javaで作成されたバッチプログラムをWinodws2008サーバーの タスクスケジューラーから呼び出してバッチ処理を実行したいと思っています。 このプログラムにはLog4j(xml)で、ログを出力するようにしているのですが、 実行するとログが出力されません。 どのようにしたらログが出力されるのか教えてください。 -環境詳細- ・javaプログラム(Hoge.java)  ・main メソッドにDBアクセスするプログラムが記述されています  ・ログはlog.info("文字列");のように記述しています  ・このHoge.javaを Hoge_batch.jarとしてjarファイル化しています ・log4j  以下のように記述しています。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- コンソール出力 --> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/MMM/dd HH:mm:ss} %-5p (%c{1}.%M():%L) %m%n"/> </layout> </appender> <!-- 操作ログ --> <appender name="File" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Threshold" value="DEBUG" /> <param name="File" value="c:\log\trace.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <param name="Append" value="true" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} %-5p [%t] (%c{1}.%M:%L) %m%n"/> </layout> </appender> <root> <level value="info" /> <appender-ref ref="File" /> <appender-ref ref="Error" /> </root> </log4j:configuration> ・Javaの呼び出し  windows2008サーバーから、パワーシェルを呼び出し、パワーシェル内で call.batを呼び出し、  call.bat の中で「java -cp Hoge_batch.jar jp.co.company.batch.hoge」として呼び出しています。 ・プログラムの階層構造  Hoge.jar log4j.xml jp co company batch Hoge.java Hoge.javaの処理は正常に動いています。 ログファイルを c:\log\ に出力したいのですが、出力されません。 ご存じの方がいらしたらお手数ですが、教えてください。

    • ベストアンサー
    • Java
  • ログファイルの検索

    たとえばログファイルに NO=1&TITLE=aa&MESSAGE=テスト1です<BR><BR><BR>ためし!!= NO=2&TITLE=aa&MESSAGE=テストの3です。<BR>TEST= というように入っていたとします。 HTMLファイルでもcgiファイルでもいいのですが、たとえば「1」と入力したら NO=1が検索されて表示されるようなものを作成するにはどのようにしたらいいのでしょうか? よろしくお願いします。 #perlです。

    • ベストアンサー
    • CGI