スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

複数の入力ソースをまとめるパイプ 

シェル(ここでは/bin/sh)の処理の中で、複数の入力ソースを一度に、テンポラリファイルを使わずにパイプしたい。
たとえばローテートしてgzipした古いログファイルと、現在記録中のログファイルの両方を区別せずに集計したい場合などが考えられる。ログファイル一つだけであれば、

COMMAND LOGFILE

とか、

gunzip -c LOGFILE.gz | COMMAND

等と処理できるが、ふたつを合わせてやろうとすると、

gunzip -c LOGFILE.gz > TEMPFILE
cat LOGFILE >> TEMPFILE
COMMAND TEMPFILE

なんてやることが多いかもしれない。ディスクに空きがあればそれでもいいが、必ずあると保証もしにくいのでテンポラリファイルを使うのは避けたい。こんな場合には次のようにやればいいだろう。

for A "cat LOGFILE" "gunzip -c LOGFILE.gz"
do
$A
done | COMMAND

こうすることで複数の入力ソースを区別せずにコマンドへ流し込んでやることができる。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/56-d01424ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。