|
あるファイルから指定日時以降に書かれたレコードを 抽出したいのですが、シェルスクリプトでできるので しょうか。 どのしょうにシェルにすればよいか教えてください。 例えば、今が、2006/04/08 12:30:00とします。 ある指定日時というのは、現時点から5分前としますので、 2006/04/08 12:25:00となります。 ファイルでは、「Apr 8 12:30:33 ・・・・・」と出力 されているので、5分まえの時間を、「Apr 8 12:25:00」 で取得し、「Apr 8 12:25:00」以降に書かれたレコードを ファイルに出力したいのです。 環境は、 Solaris8、sh、Perlで実現したいのです。 |
|
>>4566 べた 無理ではないかと思うのですが。 「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単 にできないと思います。 こういうのはどうですか。 5分前に動いた時のファイルのレコード数と今回動いた時の ファイルにレコード数の差をtailコマンドでファイルに出力 というのは。? |
|
>>4567 まんたろう > 「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単にできないと思います。 echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' として行番号をとって、その行以降を tail で出力とか。 まぁ筋の悪いやり方だとは思いますので、他の方法がよいでしょう。 |
|
>>4568 68user >echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' >として行番号をとって、その行以降を tail で出力とか。 予めファイルの全体のレコード数も必要ということですか。 マイナスとなった場合、どうなるのですか。? |
|
>>4578 EBA echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' と実行してみたのですが、行番号が2となります。 # cat logfile <pre> Apr 9 12:23:01 ・・・・・・・ Apr 9 15:17:43 ・・・・・・・ Apr 9 17:48:06 ・・・・・・・ Apr 9 18:05:30 ・・・・・・・ Apr 9 18:06:24 ・・・・・・・ Apr 10 09:23:08 ・・・・・・・ Apr 10 11:47:23 ・・・・・・・ Apr 10 13:35:49 ・・・・・・・ Apr 11 09:54:11 ・・・・・・・ Apr 11 12:17:38 ・・・・・・・ </pre> 行番号ではなく、すべてを表示したのですが、 sortが正しく行われていないみたいなのですが、 どうしてなのでしょうか。 <pre> # echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n 1 Apr 9 12:23:01 ・・・・・・・ 2 Apr 10 09:30:00 === 3 Apr 9 15:17:43 ・・・・・・・ 4 Apr 9 17:48:06 ・・・・・・・ 5 Apr 9 18:05:30 ・・・・・・・ 6 Apr 9 18:06:24 ・・・・・・・ 7 Apr 10 09:23:08 ・・・・・・・ 8 Apr 10 11:47:23 ・・・・・・・ 9 Apr 10 13:35:49 ・・・・・・・ 10 Apr 11 09:54:11 ・・・・・・・ 11 Apr 11 12:17:38 ・・・・・・・ </pre> 行番号以降をtailで出力は、 # tail +行番号 logfile でできました。 |