奇妙なバッファサイズ

奇妙なバッファサイズ

今日、私は次の興味深い命令セットを見つけました。

$ seq 5 > alfa.txt
$ awk '{print 6 > ARGV[1]} 1' alfa.txt
1
2
3
4
5

$ cat alfa.txt
6
6
6
6
6

最初の質問は、なぜ1つではなく複数のものを得たのです6が、毎回閉じる必要があることを覚えていました。

awk '{print 6 > ARGV[1]; close(ARGV[1])} 1' alfa.txt

しかし、混乱しているのは、最初から入力を削除しても、ファイル全体を閲覧して読み取ることができるということです。私の考えでは、Awkが実際にバッファに書き込んで最後に、またはバッファがいっぱいになるたびに実際のファイルに書き込むようです。

後者が真であれば、バッファサイズはいくらですか?

答え1

実装によって異なりますが、awkが入力を開いた後に出力ファイルを開くことがわかります。 awkが読み込んだオープンファイル記述子を除いて、元の入力ファイルは失われます。

これを行うことができるのは単にawkではありません。多くのアプリケーションで一般的です。

ps:バッファはディスクです(質問ではサイズを決定できません)。

答え2

少なくとも私のシステムでは、ファイルで32768、パイプで65536のようです。

$ yes | head -100000 | tee file > pipe

$ awk '{print "n" > ARGV[1]}' file

$ sed s/y/n/ pipe | awk 'BEGIN {while (getline < "-") print > ARGV[1]}' pipe

$ wc -l file pipe
 32768 file
 65536 pipe

関連情報