電子書籍の厳選無料作品が豊富!

シェルを使用して特定のキーワードが出たログの"時間のみ"を抽出して画面に表示させようとしているのですが、方法が見つかりません。
grepを使ってキーワードが含まれた行は出せるのですが、grepした行からさらに時間のみを抜き出すにはどうすればいいでしょうか?

[2006/01/01 17:00:00] ID:×××× ○○作業開始
[2006/01/01 17:50:12] ID:×××× ○○作業終了
[2006/01/01 19:20:00] ID:×××× ○○logout
[2006/01/01 20:00:00] ID:×××× ○○login
[2006/01/01 20:30:00] ID:×××× ○○作業中断

例として上記のようなログから特定のIDの行を抜き出し、さらに抜き出した行から時間のみを画面に表示させたいです。

よろしくお願いします。

A 回答 (2件)

シェルだけでは、いつかは限界がきます。


私はPerlをお勧めします。
以下は、このWindowsのPCで今行いましたが、
Unix/Linux/Macでも、同じようなものです。

C:\>type test1.log
[2006/01/01 17:00:00] ID:a001 ○○作業開始
[2006/01/01 17:50:12] ID:a002 ○○作業終了
[2006/01/01 19:20:00] ID:b001 ○○logout
[2006/01/01 20:00:00] ID:b002 ○○login
[2006/01/01 20:30:00] ID:a003 ○○作業中断

C:\>perl -ne "print \"$1\n\" if /^(\[.+\]).+ID:a00/" test1.log
[2006/01/01 17:00:00]
[2006/01/01 17:50:12]
[2006/01/01 20:30:00]

C:\>
    • good
    • 0
この回答へのお礼

アドバイス+テストまでしていただき、ありがとうございます!
今回のアドバイスをもとに試してみたいと思います。

お礼日時:2006/07/13 14:32

 継続的に行う業務なら#1さんのとうりにPerlやシェル・スクリプのようなバッチに作成すると効率がいいですが、1回限りなら・・・頭の体操と思ってパイプで直列処理させるのが簡単です。



Ex
# cat (元ファイル) | sort | grep "2006/01/01" | grep "logout" ..... > (結果保存ファイル)

 上記のように順番に grep すれば目的の結果が得られると思います。 キー・ポイントは sort ですね ^ ^
欲しい結果が得られるように事前に sort すると意外と簡単になりますよ・・・『ご利用は計画的に』(笑)
 必要なら中間に sort を入れたり、 sort のオプションを使ったしても良いですが、余り複雑になるなら・・・バッチを作成する方がいいです。
    • good
    • 0

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