Awk
awk 緩衝區大小
我今天注意到了這組有趣的命令:
$ 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
我的第一個問題是為什麼我得到幾個
6
而不是一個,但後來我記得你每次都需要關閉:awk '{print 6 > ARGV[1]; close(ARGV[1])} 1' alfa.txt
然而,讓我感到困惑的是,如果我從一開始就破壞輸入,我怎麼能仍然通過並閱讀整個文件?我的猜測是,Awk 實際上是在寫入緩衝區,然後在最後或者每次緩衝區填滿時寫入實際文件。
如果後者為真,那麼緩衝區大小是多少?
至少在我的系統上,它似乎是來自文件的 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
它依賴於實現,但您會看到 awk 在打開其輸入後打開輸出文件。原始輸入文件失去,除了它讀取的 awk 的打開文件描述符。
這不僅僅是 awk 可以做到這一點:它對許多應用程序都很常見……
ps:緩衝區是您的磁碟(大小無法從問題中確定)。