HP-UX General
1819829 メンバー
3134 オンライン
109607 解決策
新規ポスト

tailとgrepのパイプ表示をファイルに保存したい

 
Ke_Oo
新しいメンバー

tailとgrepのパイプ表示をファイルに保存したい

基本的なことかもしれませんが・・・

tail -f test.log | grep -e TEST >> tailgrep.log

のように、tailとgrepをパイプで連結した結果をファイルに書き出そうとしても、何も書き込んでくれません。

リダイレクトしなければ画面上にはちゃんと表示されますし、tailも-fモードでなければちゃんと書き込まれるので、followモードの動作に関係があるのだと思いますが、これを解決するにはどのような方法がありますか?
4件の返信4
H_K
頻繁なアドバイザー

tailとgrepのパイプ表示をファイルに保存したい

パイプライン全体を終了させずに、

tail だけを終了させるとよろし。

Ke_Oo
新しいメンバー

tailとgrepのパイプ表示をファイルに保存したい

なるほど、たしかにtailをkillすると、それまでの結果がファイルに書き出されますね。

ただ、言葉足らずだったのですが、やりたいことは継続的にログを監視して、文字列にヒットする出力があった場合はリアルタイムに別のログに書き出すことだったのです。(さらに言えばシェルにして自動化したい)

Cかなにかでseekするようなプログラムを作ればいいのでしょうが、簡易に実現できればと思ったものですから・・・
nt
貴重なコントリビューター

tailとgrepのパイプ表示をファイルに保存したい

> 何も書き込んでくれません。

これは grep の出力が buffering されているためですね。 8kbytes ごとに

書き込んでいます。

perl が使えれば

$| = 1;

while (<>) {

if (/TEST/) {

print;

}

}

のような perl program を grep の代わりに使えば良いと思います。

Ke_Oo
新しいメンバー

tailとgrepのパイプ表示をファイルに保存したい

perlで試して見たら、ちゃんと出力されました!

grepのバッファリングの問題なら、頂いたサンプル程度の作りで簡単に実現できますね。

ありがとうございました。