vine-users ML アーカイブ



[vine-users:068976] Re: grepで 上書きエラー

  • From: y_shiro@xxxxxxxxxxxxxxxx
  • Subject: [vine-users:068976] Re: grepで 上書きエラー
  • Date: Tue, 30 Nov 2004 13:34:17 +0900
白鳥です。

実際に、a、bのファイルを作成して試してみました。
  $ grep test * > c
  $ grep test * > c
a、bの二つだけだとcには
a、bの結果のみ出力されてcの結果はありませんでした。これは二番目のgrepを
起動したときにcのサイズが0となるためですね。grep test cの処理は行なわれる
がサイズ0のため、結果もなしと。

> また、grepの出力はバッファリングされず、grep が出力したものはすぐにcに
> 出力されるものとします。 ← ここが肝です。

もしa、bにtestと記述されている行がgrepのバッファ以上に大きければ、
  1) cにa、bの結果がバッファを溢れて反映
	↓
  2) grep test で cが検索対象となる(cには、すでにバッファ以上の内容が入っている)
	↓
  3) cにc自身の結果が追記
	↓
  4) cに追記された内容がさらにgrepが検索、バッファを溢れcに追記
	↓
  以後3)と4)の繰り返しで処理が終わらない

といったことになるのですね。なるほど。自分としては、grepが一時的にどこかの
ファイルに処理を溜めておいて、最後に出力されるものだと思っていました。
実際にはバッファ以上の処理があった場合は、ただちにファイルに書き込まれて
しまうのですか。たしかに肝ですね。まさか、バッファを溢れた場合とそうでない
場合で結果が違うとは、考えてもいませんでした。

大変、勉強になりました。どうもありがとうございました。